[FEATURE propertyBraceExpansion]

Add support for brace-expansion in dependent keys, observer and watch
properties.  The complete list of methods with this support is as follows:
- computed
- reduceComputed
- addObserver
- removeObserver
- addBeforeObserver
- removeBeforeObserver
- watch
- unwatch

This is most useful with array computed properties, although it is supported in
other cases.

Example:
```js
// The following two are equivalent
Em.O({
  filtered: Em.computed.filter('list.@each.propA', filterFn).property('list.@each.propB')
});

Em.O({
  filtered: Em.computed.filter('list.@each.{propA,propB}', filterFn)
});

// The following two are equivalent
obj = {};
observer = function() {};
Ember.addObserver(obj, 'foo', observer);
Ember.addObserver(obj, 'bar', observer);

Ember.addobserver(obj, '{foo,bar}', observer);
```
[BUGFIX beta] Move test to more reasonable module.
[BUGFIX beta] uniq reduceComputed dependent keys.

If property brace expansion is enabled, there is never a need to have duplicate
dependent keys.  However, with proeprty brace expansion disabled, it is the only
way to specify multiple item property keys, as in the following:

```js

var obj = Em.Object.createWithMixins({
  items: Em.A([{ foo: true }, { bar: false }, { bar: true }]),
  countFooOrBar: Em.reduceComputed({
    initialValue: 0,
    addedItem: function (acc, item) {
      if ( get(item, 'foo') || get(item, 'bar')) {
        ++acc;
      }
      return acc;
    },

    removedItem: function (acc, item) {
      if ( get(item, 'foo') || get(item, 'bar')) {
        --acc;
      }
      return acc;
    }
  }).property('items.@each.foo', 'items.@each.bar')
});
```

Of course, with property brace expansion, it would be better to write the
dependency as `property('items.@each.{foo,bar}')`.

Fix #3554.
Merge pull request #3538 from hjdivad/property-brace-expansions

[FEATURE propertyBraceExpansion]
Merge pull request #3565 from hjdivad/fix-3554

[BUGFIX beta] uniq reduceComputed dependent keys.
[BUGFIX beta] Add onRemoveHelpers callback queue.

This adds a callback queue that fires upon removeTestHelpers. The main
reason for this change was to prevent leaking of the `ajaxStart` and
`ajaxStop` listeners.