Added async validation

A rule that returns a promise becomes an async validator. Added
isValidating observables and validate() functions always return promises
to which clients should attach to get the result of validation