[WIP] Add callbacks

I would like to introduce callbacks as a mean to perform actions before `update`, `insert` and `delete`.

Here is a first draft I am working on as a basis for discussion.

It is my hope that if I get this right, we can add:

- Serialisation (maybe that would be a good way to tackle hstore, json, ... data types)
- Timestamps
- Automatic validations?

ToDo:
- [x] Documentation
- [ ] Validations
- [ ] Add params to functions
- [x] Reconsider naming (CRUD vs. Repo methods)
- [x] Hook up callbacks to Repo (actually invoke them)
This is not going to work as expected because what you get back from `adapter.all` may not be plain models. This is actually quite trick because not only may get models nested in lists and tuples like this: `[{[%Post{}], %Comment{}}]`, you also have models that are loaded on associations, from `assoc` and `preload`.

The best solutions may be to have the adapter call the callbacks since it is have full control of building the models.

What are your thoughts @josevalim?