Implemented batch fetching for NSManagedObject uniquing

As discussed in #324, there is a big performance hit when converting a big number of `MTLModel`s to `NSManagedObjects`s, because an individual fetch request is made whenever a unique managed object is expected. 

This PR takes an approach of batching these individual fetch requests into bigger ones. This allows for a great performance improvement (over a magnitude) compared to the current approach. 

First, an additional pass through the model hierarchy is performed before an actual serialization. During this pass, all uniquing key-value pairs are being collected per model class. These values are then used to compile fetch requests. Models are then bound to fetched managed objects, so they can be used during the main serialization pass.

`MTLManagedObjectAdapter` now has two new methods accepting collections, similar to `MTLJSONAdapter`. However, in this case it's not just a mere conveniency, but also a big source of optimization.

I've added some basic tests for this stuff, however I intend to add more for complex cases such as multiple uniquing keys. 

Looking forward to hear from you :)
Why does this create a mutable array purely to covert it to a set afterwards? What about using `NSMutableSet` or just pass in the array to `predicateWithFormat:`, I believe this supports any object conforming to the `NSFastEnumeration` protocol. The documentation for `NSInPredicateOperatorType` doesn't mention NSSet or NSArray, only `collections`.