Place save-related hooks closer to the actioning code.

`Instance.validate` now calls `beforeValidation` hook.
Change parameters of `Instance.validate` callback to allow for returning non validation errors in future.
Fix hook tests; `Date.now()` produced identical timestamps for me for some hooks.
Add some `Instance` tests.