Eager load ! ! !

### Problem
Eager load using IdentityMap

### Solution
We should remove the IdentityMap, and add a set of preloaders that would know how to aggregate the queries to eager load documents in as less queries as possible. 

### How
The way this works is basically adding 4 different preloaders, one for each relation type. There is one Base preloader that have the shared code among the others, and the subclasses only are responsible for tell how to aggregate the data and how to query the data.

@durran I believe eager load is in a good shape now, would love to have as much eyes as possible on this.(I know it is kind of big, but I couldn't find a way to ship it in pieces.)

TODO: ( will do them, after this ships )
 * remove identity map for good
 * add a NICE changelog entry
 * add more tests