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
Added unit tests to prevent regressions to the DefaultConfigurationManager

Moved the logic for determining the Topic TTL to the ConfigurationExtensions
in order to ease testing.