Merge remote-tracking branch 'origin/refactor_session'

* origin/refactor_session:
  Refactor Session
  Add timeout for XDomain session extraction
  Integrate Engines with Session and cleanup code
  Create Session Extraction engines
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 promise rejects,
then the returned promise reject.
It passed along the reject message.

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

Using .any(), if all of the passed promise reject,
then the returned promise rejects. It will pass along
the results of all passed rejected 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.
Update API to support after load usage

Replace API endpoint (window.sa) on payload load.
Implement a more robust API method declaration system.
Implement new API methods and signatures.
Implement Session Create/Connect on a single command.
Implement auto sending of PageViews if no other actions are created
Support both API versions

Temp fix to handle both API versions,
while deploying the updated versions of all
necessary components.