Add new 'properties' validator which recurses into object.

Implement support for nested objects (#7).

The approach I took was to create a `properties` validator which recursively invokes `runValidations`.

A way to do validations over arrays would be cool, but outside the scope. A similar approach should work for that, but it would be a bit more fiddly, I think.