Fix KVO that breaks if a target object overrides 'isEuql' and 'hash'

NSDictionary's key is compared by key object's hash.
In BW::KVO targets are held as dictionary's key.
So if target objects' class override 'hash' (and 'isEqual'), KVO doesn't work collectly.