fixed double callback calls on bound key change, and made automatic cleanup more reliable by swizzling dealloc