Adjusted `_validate` to get closer to @jokull's implementation.

The idea is that _validate() will have flags that used to add up into a few
different validate functions, like validate_partial.
Rejiggered the validation system to be cleaner and to put a validate function on model instances.