Add event dispatcher to step validations

According to steps actions executed through event dispatcher, this new step validations use same approach and introduce a `ViolationList` object to manage validation errors.

To validate a step can be reached, you just need to listen the `<process_name>.<step_name>.validate` event.

Example:
```php
$dispatcher->addListener('post_publication.published.validate', function(ValidateStepEvent $event) {
    if ( ! $event->getModel()->canBePublished()) {
        $event->addViolation('error message');
    }
}
```