Implement an easy-to-use thrift client wrapper.

Like writing thrift server code, writing thrift client code requires a
lot of boilerplate, and the core thrift libraries omit a lot of
basic functionality.

This diff adds a new module, sparts.thrift, defining `ThriftClient`

The preferred way to use ThriftClient is to use its class methods, such
as `for_hostport(host, port, **kwargs)` or `for_localhost(port, **kwargs)`.

While ThriftClient is flexible enough to be used directly, it is
encouraged to subclass it in order to reduce the number of required
creation arguments.
Add an fb303 client/server test.

This test case verifies a lot of functionality that was previously
untested, including:

- Basic ThriftProcessorTask functionality
- Fb303::getStatus()
- Basic NBServerTask functionality
- Basic ThriftClient functionality

Fixes #59