use predicate instead of function for validator
add validateAsynch and checkAsynch

When excessively validating properties and requireing IO operations for some validations, asynchronous calls can be very handy.
The implemented calls validateAsynch and checkAsynch have the same signatures as their synchronous counterparts, but return
a java.util.concurrent.ComplitableFuture instead of void or boolean.

validateAsynch return a future which returns the actual value again on calling get().
checkAsynch returns a future which return a boolean value (if valid or not) on calling get().

When the error handling action throws an exception, it can either be handlet when calling get() and catching the ExecutionException,
its cause attribute will be the e.g. ValidationException, or use the handle/handleAsynch continouation functions.

Further tasks in this branch:
- clarify state issues on Validator instances and ValidcoolConfiguration
- should we wrap completable future?
- combining validations
introduce predicate based validator, super class for tests

New validator operation "is" where user can defined description
and function of the validation using the predicate interface:
validate(number, is("dividable by 2", val -> val % 2 == 0));

Abstract class ValidationErrorLogging in test source should be implemented
by all test classes so they share a common logging behavior.
describe is validator in README
introduce better/more comprehensive error messages

Update Validator class to be stateless and more effecient on caller side.
Validators with/and/or are now own implementations of Validator in the
org.validcool.validations package, still exposed in Validations class.

Error message are now created by replacing a substring of "${actual}"
with the actuals values. No lambda is passed anymore to Validator.
new Validator<>(val -> val % 2 == 0, "${actual} is not even number");
The error message should contain the verb and negation for the message.

The not-validator will remove the first not substring found in the
passed validators error message pattern. So when taking the validators
from above: not(isEvenNumber()) will produce the error message:
"${actual} is even number".

The and/or associations will now only log the error message of the
error which actually occurd.

The with validator tries to output the parent as well as child name
or value in the error message.
Merge branch 'master' into asynch

Conflicts:
	src/main/java/org/validcool/Validations.java
first working version of asynchronous validation

The validateAsynch operation mirrors the signature from validate, but
additionally offering a validation hint parameter, indicating wheter
the validation is computationally heavy, simple or contains IO
operations. Computationally heavy and IO operating validations will
be excuted in seperate execution units, while all simple computations
are collected into one.
provide interface to asynchronously validate one property

when calling validateAsynch you can now immediately start the
asynchronous validation without passing to the validate function, simply
by calling validateAsynch(...).run(), which returns a CompletableFuture.
add readme examples and documentation for asynch
correct typing errors in README.md
ready build.gradle for maven publish
Merge branch 'master' into iofile