Converted the validators to classes
Renaming of convention

Anything validatable must respond to 'validate()' and return a promise.
If the validation passes, the promise resolves. If it fails, the promise
is rejected.

In the property validators, the Base.validate() method expects the
property validator to respond to 'call()' for running the actual
validation. Base.validate() will handling the promise.
Extracted conditional validator tests into its own file
Validators rebuilt on each validations run
Support composite validations