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