Modified KeepAlive to utilize a LastMessageAt property.

- Also modified existing tests that relied on the LastKeepAlive property to now rely on LastMessageAt.
- LastMessageAt can now be used by LongPolling for message monitoring purposes.
Added a ReconnectWindow to the connection object.

- ReconnectWindows are used to ensure that connections do not attempt to reconnect after extended periods of time.

#2528
Added a test to verify that ReconnectWindows work appropriately.

#2528
Addressed code review comments.

- Modified how we track the active state of the client.
- HeartbeatMonitor is now a generic beat that can be used for periodic checks.

#2528
Added a default beat interval for the HeartbeatMonitor in the situations where KeepAlive is disabled on the server.

- Also fixed some tests to properly return transports with valid SupportsKeepAlive values.

#2528
Added a check to determine if we have a monitor to dispose.

#2528
Fixed tests to abide by new heartbeat timer and the last message at value.