Fix async pymongo

Summary:
My earlier fix to make connect synchronous to get around a deadlock had
the unintended side-effect of totally breaking async'ness in pymongo
(and also fixing the async deadlock).

Fix in a more rigorous way by introducing an async Event implementation,
so a greenlet can block on another greenlet without deadlocking.

Test Plan:
Full battery of async & failover tests. Specifically:

* Use netstat to confirm multiple connections are open
* Make concurrent web requests, confirm queries are run async
* Fail the active mongos, verify automatic failover to the other one
* Fail both mongos, verify pages error out
* Resume a single mongos after total failure, confirm things work
* Switch single active mongos from one to the other, confirm failover

Reviewers: david, jack, josh

Maniphest Tasks: T11179

Differential Revision: http://phab.wish.com/D20944