Refactor KVO code to use weak references

Whenever possible, annotate public parameters as such too, so the
compiler will error if it knows a weak reference can’t be formed to a
particular class.
Simplify -rac_valuesAndChangesForKeyPath:
Tear down KVO with an unsafe reference

A weak reference won’t live long enough for us to do so.
Allow nil observers in rac_valuesAndChanges…
Only invoke -rac_valuesForKeyPath: against `id`

Addresses
https://github.com/ReactiveCocoa/ReactiveCocoa/pull/1595#discussion_r212
00958.
wow observer, you're so strong
Merge pull request #1595 from ReactiveCocoa/weak-references

Use weak references in KVO observation