(TK-108) Add support for persistent Java clients

This PR adds support for both synchronous and asynchronous persistent Java clients.
To cut down on the repetition a bit, I think it would be good to pass the `simpleRequestOptions` through to a common method that all of the request paths - `get`, `post`, etc. - would inherit.  Maybe the `simpleRequestOptions` could be passed through to the `JavaClient.request` method and `extractRequestOptions` and `extractClientOptions` could be converted into private methods which are called only from within the `JavaClient.request` method?