Instead of merging dictionaries, keep a list of separate metadata dictionaries and implement valueForKeyPath: to iterate through them.  This is a bit more substantial change, and one situation may still be a bit inefficient -- when creating a parentObject for a deep hierarchy, we need to create some standin objects which implement valueForKey: the same way, rather than intercepting at the RKMappingSourceObject class.  Not sure if there is a way around that.
Further speed changes; the creation of the metadata dictionaries is fairly expensive; a specialized object can be faster.  Also, it allows us to create just one and re-use the instance whiel iterating over a to-many relationship.  Secondly, the metadata used for a to-one relationship is constant, so can be a static instance created just once.  Refactor some of the code used in the previous commit and document new public methods.
A few further changes, mainly to cut down on the metadatas object being created in the top-level RKMapperOperation by using a custom class instead of creating NSDictionaries each iteration.  This is a little bit faster, especially with many objects at the top level.  Did require changing a private method signature which needed unit test updates.
Merge pull request #2077 from carllindberg/2065-AvoidMergingDictionaries

Speed up metadata implementation