Add hooks

Including asynchronous hooks - available hooks are init, retrieve
save, delete, delete
Only a post-hook is available for init and retrive.

The cost of having asynchronous on init is that `new Model(...)`
will return a promise, so we highly encourage not to use asynchronous
hooks for `init`.

Also one functions like validate can return a promise if hooks are
set on it.
Fix #56, Fix #53, Fix #82
Bump to 1.13.9