-`InputCollection::getItemsByType()` and `InputCollection::getItems()` now returns an `Iterator`
- Renamed `InputCollection::append()` to `add()` and added `$position` flag
- Added `POSITION_APPEND` and `POSITION_PREPEND` flags to `InputCollection`
- Made `getCollection()`, `getInput()`, `find()`, and `validate()` in `AbstractInputHandler` final
- Removed all categorisation of items by type in `AbstractInputHandler::$input`
- Abstracted most of `AbstractInputHandler::validate()` into it's own protected method called `validateInput()`
- Removed `$skipValidation` argument from `AbstractInputHandler::bind()` and relaced with `$flags`
- Added `FLAG_BIND_SKIP_VALIDATION`, `FLAG_VALIDATION_SKIP_REQUIRED`, `FLAG_VALIDATION_SKIP_CUSTOM`, and `FLAG_VALIDATION_SKIP_UNRECOGNISED` flags to `AbstractInputHandler`
- Added check in `AbstractInputHandler::validate()` to look for unrecognised options and arguments
- Removed `InputHandlerFactory::FLAG_SKIP_VALIDATION` from `InputHandlerFactory`
- Passing flags in call from `InputHandlerFactory::build()` to `AbstractInputHandler::bind()`
- Updated `InputHandlerInterface::bind()` and `validate()` methods to support flags
- Fixed logic bug that prevented `$index` and `$type` from being set in `InputCollection::append()`. This means replaceing items in an `InputCollection` now works as expected
- Throwing `InputValidationFailedException` exception when validation fails
- Updated `RequiredInputMissingException` and `RequiredInputMissingValueException` exceptions to use `InputTypeInterface::getDisplayName()` when producing their message
-`AbstractInputHandler::find()` returns NULL if it cannot find any input with the supplied name. It is easier to test for NULL than it is to catch an exception