Address issue #57
Defensive coding against @socket.nil?
Version bump.  Will happen eventually.
Correct failover error: failing host is immediately retried.
On connect retry, kill any pre-existing HB ticker threads.
Consolidate logic that prepares for a reconnect retry.
Retry new connection when HB send fails.

When @reliable is true, and a heart-beat send fails,
clean up the current environment, and attempt a
fail over reconnect.
Retry new connection when HB read fails. First cut:

When @reliable is true, and a heart-beat receive fails,
clean up the current environment, and attempt a
fail over reconnect under the following conditions:

* The :max_hbread_fails connect hash parameter is greater than 0
* The running read failure count is greater than :max_hbread_fails
Correct another case where fail over host is not switched correctly.
Add exception handling to heartbeat reader.
Retry new connection on HB read lock obtain fail.

When @reliable is true, and a read heart-beat can not obtain the
read lock, clean up the current environment, and attempt a
fail over reconnect under the following conditions:

* The :max_hbrlck_fails connect hash parameter is greater than 0
* The running obtain failure count is greater than :max_hbrlck_fails
Tweak callback logger example.
Tweak callback logger used in unit tests.
Add missed comment about new HB read lock parameter.
Update spec tests with new parameters.
Change comparison operator for more clarity.
Update SSL use case examples.
Set sync_close to true for SSL connection.
Add notes on use of heartbeats.
Detect nil?/EOF on HB read, failover if reliable.