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.

In the case, that this change cannot be applied:
- which is the common intention of the `willDestroy` hook?
- how could this use case be done?