Future proof KVO implementation

As explained in http://www.dribin.org/dave/blog/archives/2008/09/24/proper_kvo_usage/ the only safe way to know if you must call `[super observeValueForKeyPath:ofObject:change:context:]` is to use the context parameter. You also want to pass this context parameter when removing self as an observer.