[Validator] Implemented handling of arrays and Traversables in LegacyExecutionContext::validate()
[Validator] Changed validateValue() to validate() in the new API

The validation of values against constraints should be a first-class citizen
in the API. For this reason, validate() now takes a value and a constraint or
a list of constraints. This method should be used for the most basic use
cases.

If users want to annotate objects with constraints (this is optional,
advanced functionality), they can use the more expressive validateObject()
method now. For traversing arrays or Traversables, a new method
validateCollection() is now available in the API.
[Validator] Tested the validation in a separate context
[Validator] Finished test coverage and documentation of ExecutionContextManager