(TK-108) Add support for persistent Java clients

This PR adds support for both synchronous and asynchronous persistent Java clients.
Why does this have / need to hold a `client`? Seems like this should be independent from the "options".