a more uniform .all() implementation via PromiseSet

So here's a more uniform `.all()` implementation that matches the behavior of an RSVP.Promise...in fact, it piggybacks on top of it.

Just like you cannot do `RSVP.then()`, you shouldn't be able to do `RSVP.all()`. The usage becomes pretty much identical to a regular Promise.

```js
var promiseSet = new RSVP.PromiseSet([promiseA, promiseB, promiseC]);

promiseSet.then(function(value) {
  // success
}, function(value) {
  // failure
});
```

additionally, there are `.all(promises)` and `.thenAll(promises, done, fail)` methods that now exist on both the `Promise` and `PromiseSet` which can be used in the familiar way. More tests should probably be added, but the ones that exist now all pass with slight modifications to accommodate the matched implementation.

-leon