Add caching for different property mapping types, both in RKObjectMapping, and RKMappingOperation.  Determining simple vs keyPath mappings was somewhat of a hotspot, so caching them in RKMappingOperation helps a bit.  However, these will be identical to the versions in RKObjectMapping if there is no substitution (the most common case), so if we cache the properties there, then we can just re-use the same array for the operation without creating local copies at all, which is a substantial speedup.  Similarly, caching the attribute vs relationship mappings when added to the RKObjectMapping is also a significant speedup during mapping since these don't have to be recalculated for every object being mapped.  Lastly, changed the substitution values to be an individual key and value internally, instead of a dictionary.  This avoids the need to use "allKeys" to obtain the key (and allValues to get the value), which avoids more NSArray instances being created locally.
Updates per PR comments.  Change RKObjectMapping property to keyAttributeMappings, and initialize the properties in -init.  Change internal RKMappingOperation method to cacheMappingsIfNeeded.
Cache the propertyMappings in dictionary form by both the destination and source keys, which allows for faster lookup during mapping.  Also, change a couple of CoreData related calls to use the fast-lookup method rather than a method which constructs an entire dictionary to then just look it up by key.  I left the accessor methods as "copy" rather then having immutable dictionaries because those methods are no longer called from the core mapping code (or anywhere else, for that matter).
Merge pull request #2081 from carllindberg/2065-CachePropertyMappings

Add caching for different property mapping types