Place save-related hooks closer to the actioning code.

`Instance.validate` now triggers `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.

This was primarily done so that `Instanve.validate` could transparently trigger `beforeValidation` without duplicating the hook trigger. I believe that the hooks were being triggered in the wrong place. `saveInstance`  was like a proxy function that called all the hooks, and then all the code ran. With these changes, the hooks are run right next to the code.