There was a semaphore leak in MongoReplicaSet.__socket, though not critical.
After getting disconnected during auth, it discards the server's whole pool.
Then it wakes the monitor and creates a new pool, recovering from the leak.
That's fine unless, at the moment we wake the monitor, we're unlucky and it's
just started running using the previous pool (due to periodic monitoring or
whatever). In that case it can't get a socket, and tells the main thread it
thinks the primary's down *again*. Thus we threw two errors instead of one, but
we still recover eventually.