Remove the extra RAC KVO keys
Remove the requirement for the reduceEach on rac_valuesForKeyPath

This removes the requirement for the reduceEach: on
rac_valuesForKeyPath:observer:. We add a new method which
rac_valuesForKeyPath:observer: and
rac_valuesAndChangesForKeyPath:options:observer: both use. This saves
significant cycles when using RACObserve().
Optimise addDeallocObserverToPropertyValue

This stops the property attributes being checked every single time the
value changes. It’s always the same property (i.e. keyPathHead on self)
anyway. So just do the property attribute checking only once and then
cache whether or not we actually need to do it.
Use an optimised version of map instead of re-implementing rac_valuesForKeyPath
Fix code style
Remove the -map: optimisation
Use -map: rather than -reduceEach: to improve performance (no block trampoline)
Add comment saying why we're using -map: over -reduceEach:
Flip to isObject
Fix for case where attributes is NULL
Fix code style
Merge pull request #1313 from mattjgalloway/optimise_kvo

Optimise RACObserve()