Fix KVO registration/deregistration issues.

viewWillAppear and viewWillDisappear are not guaranteed to happen in any particular order; the only guarantees are that they will be called on appearance/disappearance. That is, viewWillDisappear, for example, can be called more than once. This means that for proper KVO API conformance, to register/deregister in these methods you need to keep track of whether or not you're currently observing. This fixes #180, fixes #268, fixes the issues caused by #131 and the fix in #177 that was later reverted.
Use property rather than ivar for viewWillAppearHasSetupObservers.
Rename viewWillAppearHasSetupObservers to isObserving.
Merge pull request #350 from jcoleman/fix-kvo-issues-on-iOS6_support_stable

Fix kvo issues on iOS6_support_stable
Merge remote-tracking branch 'upstream/iOS6_support_stable' into iOS6_support_stable