Yaniv custom attributes feature

This branch changes the interface of the monitor for better OOP logic and custom attributes support.

TODO:
Update version in pom.
release new version.
protected...

throw new IllegalOperationException()