(TK-108) Add support for persistent Java clients

This PR adds support for both synchronous and asynchronous persistent Java clients.
:+1: on the idea of returning an interface instead of the concrete class here.  I'm also struggling with a good naming strategy.  Another idea would be to have the interface be called `PersistentAsyncHttpClient` but have the implementation class be called `InternalAsyncHttpClient`.  Not sure if you think the term "Persistent" leaks too many details?  Is there anything else about the public API for the `PersistentAsyncHttpClient` class as it currently stands on this PR that you think isn't generic enough for external use.