Fix a crash when the given context points to a non-objc object

The original `addObserver:` declaration is:
```objc
- (void)addObserver:(NSObject *)anObserver
forKeyPath:(NSString *)keyPath
options:(NSKeyValueObservingOptions)options
context:(void *)context
```

But your declaration is:
```objc
- (void)addObserver:(NSObject *)anObserver
forKeyPath:(NSString *)keyPath
options:(NSKeyValueObservingOptions)options
context:(id)context  //not (void *)
```

It may cause some troubles when `context` is not an objc pointer.
Since ARC will retain any objects with `id` type, it will result in EXC_BAD_ACCESS when the objc runtime tries to retain a context that points to a C struct or other primitive types.
Check `testKVOAutoRemovalWithIntegerContext` for a running example.