[FEATURE conditional-observers-and-listeners]

I find myself doing the following a lot:

```js
SomeClass = Ember.Object.extend({

  enabled: true,

  value: 'foo',

  valueDidChange: function() {
    if (this.get('enabled')) {
      // do something after value changes only when enabled is true
    }
  }.observes('enabled', 'value')
});
```

That works fine under normal circumstances but what happens when your dealing with a large number of these objects and `value` changes frequently when `enabled` is `false`? The `valueDidChange` observer fires needlessly on all of those objects, basically it adds additional overhead that accomplishes nothing.

If we refactor the code a bit, we can avoid this:

```js
SomeClass = Ember.Object.extend({

  enabled: true,

  enabledDidChange: function() {
    if (this.get('enabled')) {
      Ember.addObserver(this, 'value', null, 'valueDidChangeWhenEnabled');
    } else {
      Ember.removeObserver(this, 'value', null, 'valueDidChangeWhenEnabled');
    }
  }.observes('enabled'),

  value: 'foo',

  valueDidChangeWhenEnabled: function() {
    // do something after value changes only when enabled is true
  }
});
```

Now the `value` observer will only fire when `enabled` is `true` because it only exists when `enabled` is `true`. Basically, we've introduced a conditional observer. There were quite a few places where I found this sort of thing useful. So I came up with this commit that essentially allows one to do the same thing in a bit more declarative way:

```js
SomeClass = Ember.Object.extend({

  enabled: true,

  value: 'foo',

  doSomething: function() {
    // do something after value changes only when enabled is true
  }.observes('value').when('enabled')
});
```

This commit also allows `when` to work with listeners:

```javascript
Ember.TextField.extend({

  selectIsEnabled: true,

  select: function() {
    // Executes on "focusIn" only when selectIsEnabled is true
    this.$().select();
  }.on('focusIn').when('selectIsEnabled')
});
```

Thoughts?
@krisselden Would something like the following ensure that observers and/or listeners were only enabled/disabled once per run loop?
```js
setupObserversAndListenersAvailability = function setupObserversAndListenersAvailability() {
  if (conditionObserverEnabled(this.sender, this.func['__ember_conditions__'])) {
    addObserversAndListeners(this.sender, this.key, this.func);
  } else {
    removeObserversAndListeners(this.sender, this.key, this.func);
  }
};

conditionObserver = function conditionObserver() {
  once(this, setupObserversAndListenersAvailability);
};
```