Fix unhandled rejection edge cases

This includes fixes for unhandled rejection reporting edge cases:

1. Where the array passed to `when.all` contains > 1 rejection, visit the remaining array items to ensure any further rejections are not reported.  A rejection returned by `when.all` will still be reported if not handled.
1. Where `promise.finally` would unintentionally squelch unhandled rejection reporting by observing a rejection, and then transferring the rejection's handler to the returned promise.