(TK-108) Add support for persistent Java clients

This PR adds support for both synchronous and asynchronous persistent Java clients.
Ugh, I see that that is already the name of this class.  Maybe we should rename this class to just `Async` or something, and then we can use the name `AsyncHttpClient` for the interface for the client object we return?  Open to other ideas, but would like the end user API to be kept as generic as possible.