Refactor to extract a CDRSpyInfo class to replace usages of objc_setAssociatedObject
An example spec demonstrating iOS 5 and 6 runtime differences when spying on a weakly retained UIView or UIVIewController instance.
An ugly solution which passes all current test cases, debug and release.

More work is needed to handle subclasses, this is purely POC
All UIResponder subclasses get different CDRSpy treatment.

Set up spy class to work with certain UIKit subclasses

refactor to isolate ugly method.
Simplify spec as current implementation is iOS 5-safe
Proxy the description method in the same style as the others.
CDRSpyInfo teardown restores original class

This seems to address a number of strange UIKit-specific issues when code under test is compiled with ARC.
iOS specific ugliness can be deleted when iOS 5 runtime is no longer supported.