The HeartbeatInterval is no longer directly configurable.

Instead the HeartbeatInterval is set to half the KeepAlive TimeSpan or ten seconds if
keep-alives are disabled.

The DefaultConfigurationManager ensures that the DisconnectTimeout and KeepAlive
values are functional.
Updated tests and samples to use the new IConfigurationManager API
Updated the KeepAlive configuration option to be nullable.

Before a zero length timespan disabled keep-alives, but now null is used for this purpose.
Now we prevent configuring the DisconnectTimeout after configuring the KeepAlive.
The DisconnectTimeout can no longer be set to zero.
Updated test settings to work with the IConfigurationManager changes
Updated protocol version so older clients will fail.

Without a protocol version update, old clients would simply ignore keep-alives,
since negotiate now sends down the KeepAliveTimeout directly instead of
the KeepAlive interval, and the JSON property is renamed appropriately.