discard dodgy thrift connections, thread-safe pooling

I had issues using elasticsearch-py and ThriftConnection in connection with threads as well as greenlets.
At some point, thrift connections seem to go into a weird state, and you end up getting responses for requests sent from another thread and vice versa.
this is a potential race condition - `_free_connections.empty()` evaluates as `False`, *then* `.get()` is called from another thread and then the else statement fails with `Empty`