[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);
```
Refactored promises usage:

1) Used a Promise subclass instead of patching and wrapping all the time
2) Updated RSVP to fix a subclassing bug
3) Updated RSVP to support a unified onerror callback that can be used
   instead of patching the `.then` on promises.
Only catch promise errors after injecting helpers
Ember.Test Helpers no longer need to be chained
fix and simplify concurrent wait calls test
Ember-testing should not cause a test failure  when aborting transitions
Introduce registerAsyncHelper which allows for unchained async helpers

All helpers registered with `Ember.Test.registerAsyncHelper` can be called
without being chained.  These helpers will not run until all previous
async helpers are done.  All async helpers after this helper will not run
until this helper is done.

```javascript

Ember.Test.registerAsyncHelper('clickPost', function(app, title) {
  click('.post-title:contains('+ title +')');
});

//... in your test

visit('/');

clickPost('My Post');

andThen(function() {
  equal(find('h1').text(), 'My Post');
});

```
[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.
Add assertion upon too many ajaxStop's.

This is should have helped in #3564.
Merge pull request #3566 from rjackson/add_assertion_for_ajax_testing

Add assertion upon too many ajaxStop's.
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] Make Component.sendAction behave the same as {{action}} helper.
Merge pull request #3557 from teddyzeenny/refactored-test-promises-new

Refactor ember-testing and unchain async helpers
Merge pull request #3558 from rjackson/make_send_action_support_multiple_params

[BUGFIX beta] Make Component.sendAction behave the same as {{action}} helper.