Implement singleton RACKVOProxy

Per the discussion in https://github.com/ReactiveCocoa/ReactiveCocoa/issues/1122 (primarily comments and suggestions by @epatey), this branch adds a singleton ```RACKVOProxy``` which acts as an intermediate between ```RACKVOTrampoline``` and the actual KVO-observation to help mitigate various lifetime-related crashes, whose details are outlined in the aforementioned issue.

I have also included a set of tests for this new functionality, some of which may be duplicative to other tests in which case I am glad to remove them. One of the tests is the example code from #1122 which crashes 100% without this proxy code.
Since the consumer is handling part of the process, "what if" it handled it all and remove a layer of indirection?

Of course, the consumer could be alleviated from handling any part of the process by having `RACKVOProxy` perform the above two steps via one method call, e.g. `[proxy addTarget:self.target observer:self forKeyPath:self.keyPath options:options]`.