Introduce a socket pooling library for Thrift.

This is a simple reimplementation of `TSocket` so we have more control over Thrift connections. On top of that is a`SocketPool` layer for pooling connections. Finally, it introduces a `ServiceFactory` interface which `minion.ServiceInfo` should be able to implement very easily.

One thing I haven't considered is how the server timeout will interact with idle clients. For example, a thrift server may discard connections after n seconds of no activity. It would be bad to pull an idle connection out of the pool and have it immediately die, so I'll have to test that.