(TK-108) Add support for persistent Java clients

This PR adds support for both synchronous and asynchronous persistent Java clients.
That would make the APIs more similar, so from that perspective I agree.  More generally, though, I kind of like the idea of having separate `RequestOptions` from `ClientOptions` in that it could give us the possibility for choosing a default value from the `ClientOptions` for an individual request in the event that the option isn't "overridden" by a value in the `RequestOptions`.  This doesn't seem to be relevant for now, though, so I'd be fine punting on that idea until such a scenario were to arise later.