Return ValidationResult namedtuple from `validate`

The output from validate was kind of vague, this
makes it a little more clear, especially the repr()
of the ValidationResult, which ends up looking like
this: ValidationResult(valid=True, errors={})