CoreObject.willDestroy is sync called and should be able to clean up bindings

The use case is to provide an object the ability to clean up any related two-way bindings during its `willDestroy` hook.

```js
Em.View.extend({
  valueBinding: 'xxxx',

  willDestroy: function() {
     set(this, 'value', true);
  }
});
```

Maybe, this change affects some way to the current behavior which was introduced at this [commit](https://github.com/emberjs/ember.js/commit/604753e99bb9a24d12aba96f87f827b4365a47f0), but all the tests pass.

The binding is not applied because the current implementation of `notifyObservers` is skipped if the obj has enabled the `isDestroying` [flag](https://github.com/emberjs/ember.js/blob/master/packages/ember-metal/lib/property_events.js#L204).

In the case, this change cannot be applied:
- which is the common intention of the `willDestroy` hook?
- which is the recommended way to perform this use case?