Fix bug with Promise throwing errors

When a promise was already rejected and
then a .then() was called on it without a reject
callback parameter, it threw an error.
Refactor Promise.all() to be more agnostic

Now it only requires a thenable item to have a .then method.
It does not require access to the promise instance itself.
Separate .all() and .any() methods on Promise

Using .all(), if any of the passed promises reject,
then the returned promise rejects.
It passes along the reject message.

Using .any(), if any of the passed promises reject,
then the returned promise resolves. It will pass along
the results of all passed promises. The rejected ones will
pass along a value of `undefined`.

Using .any(), if all of the passed promises reject,
then the returned promise rejects. It will pass along
the results of all rejected passed promises.
Use Promise.any() on Session
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.
Merge remote-tracking branch 'origin/refactor_promise'

* origin/refactor_promise:
  Update Session Engines to properly reject or resolve their promises
  Use Promise.any() on Session
  Separate .all() and .any() methods on Promise
  Refactor Promise.all() to be more agnostic
  Fix bug with Promise throwing errors