Implement $q.allSettled

Implement ```$q.allSettled()```. This function is nearly identical to ```$q.all()```, except that it doesn't reject on the first rejected promise and it rejects with the set of results instead of the result of the first rejection.
https://github.com/kriskowal/q#combination

Fixes #8737.

TODO: Assuming this feature is accepted this PR also needs tests and docs.
Note: This code pattern could potentially be generalized to minimize duplicated code between ```$q.all()``` and ```$q.allSettled()```.