issue #7

Added tests for asynchronous validation. Also made changes to validation
logic. Earlier I was assuming that presence of one or more asynchronous
constraints meant that the entire set of constraints needed to be
validated asynchronously. This would never work because synchronous
constraints return values and do not call callbacks to report their
results. I have fixed this by splitting the constraints into synchronous
and asynchronous and then validating each one separately and then
combining the constraint violations. For grouped constraints, I have
taken independent and dependent group validation into account as well.
In short, it should behave exactly like synchronous validation. Of
course, I will only know for sure when I write tests :). But this is a
good start.