Support for complex types for object identifier values

This supersedes #823, which conflicted after #804 (proxy refactoring) was merged.

@gerryvdm: Can you review this? I had to revise https://github.com/gerryvdm/mongodb-odm/commit/11ceff1a1d3ca2a465504cd166239fbd69783de1 in light of @ocramius' proxy refactoring, but I believe this covers all of the cases. There were three points where `DocumentPersister::load()` might have been called in the returned closures.