(TK-108) Add support for persistent Java clients

This PR adds support for both synchronous and asynchronous persistent Java clients.
Same comment here as for async; I think maybe we should rename this class to just `Sync`, and then create a `SyncHttpClient` interface that we return from the `createClient` method (the actual return value can still be an instance of `PersistentSyncHttpClient`).