change a way of how the events are processed

* events can be registered with additional positional arguments
* validator events listeners use validator's key as 2nd argument instead of
  validator's object
* add examples
* add docstrings