Implement fast_fail switch on Promise.all()

If fast_fail is true, then the promise returned by all(),
gets rejected as soon as one of the params promises gets rejected.

If fast_fail is false (default), then all the param promises
have to fail. So if only some of them succeed, then the promise
returned by .all() will resolve. The results of the rejected
param promises will have value `undefined`.
Update Session Engines to properly reject or resolve their promises

If no value, or on error, reject the promises.
If valid value, resolve the promises.