sync: Failover redesign.
sync: Failover redesign.

Instead of pinging and checking for master before every single
request, only do that if absolutely necessary:

* If we want to ensure we're connected to a master
* Or if a sent command failed.

Failiure during receive will always be treated as fatal, and will not
trigger an automatic reconnection.

algernon/libmongo-client,algernon/libmongo-client,algernon/libmongo-client