Long-polling Keep-alives

This PR adds keep-alive functionality to the long-polling transport by sending space characters (' ') instead of empty objects ("{}").

Since these keep-alives are purely whitespace, older clients are compatible with this change.

Updated clients now check that keep-alives are sent at the appropriate interval via the long-polling transport just like they already do for all the other transports. When the client notices that too many keep-alives have been missed, it will reconnect.

The updated .NET client will always check for long-polling keep-alives, but the JS client won't if the browser doesn't support XHR progress callbacks, JSONP is in use, or there is a non-zero LongPollDelay configured.