Added a reconnect window through which reconnects ensure that a time threshold has not been passed.

- Added a generic heartbeat method that is used to check keep alive but also do any other time related tasks.
- Also changed the lastKeepAlive to be lastMessageAt.  LastMessageAt is a more generic name.

#2513
Added a test to verify that reconnecting transitions into the disconnected state if the reconnecting threshold exceeds the reconnectWindow.

- Also modified all the keep alive tests to use the new LastMessageAt property and the new generic heartbeat.

#2513
Clear the session storage on page load so QUnit doesn't auto-rerun old tests.