Support incomplete input.

Semantics are:

If a "properties" validator is given, any properties present in the
input that aren't specified in the validator are flagged as errors.

Properties specified in the validator that are missing from the input
are not necessarily an error. However, the validators for the missing
object are still run, and having a `presence: true` validation (for
example) will cause an error to be flagged.