(TK-108) Add support for persistent Java clients

This PR adds support for both synchronous and asynchronous persistent Java clients.
Okay, I think I'm on board with that now.  Other than the `createClient` method, everything else on this class doesn't have "client" scope so leaving "client" out of the name of this class - and the corresponding `Async` class - makes sense.