a more uniform .all() implementation via PromiseSet

So here's a more uniform `.all()` implementation that matches the behavior of a regular `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()`. With this version, 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's now a `.all(promises, done, fail)` method that exists on both the `Promise` and `PromiseSet` prototypes which can be used in the familiar way. The `done` and `fail` callbacks are optional, you can just chain a `.then(done, fail)` call instead. The existing tests all pass with slight modifications to accommodate the matched implementation.

-leon