Create Session Extraction engines

Essentially they are classes that implement
the thenable interface.
Integrate Engines with Session and cleanup code
Add timeout for XDomain session extraction
Refactor Session
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