Add Optional parameter support to BaseValidator

Added possibility to give an Optional<> generic parameter for generic
methods. Now the user should make only one init method with required and
optional annotations.

Refactored existing validators to use Optional<> paramters.

Add tests for Optional
Add documentation for new BaseValidator
Clean code

Removed obsolete methods
Clean code style