(TK-108) Add support for persistent Java clients

This PR adds support for both synchronous and asynchronous persistent Java clients.
Yeah, it's a good question.  I've been following the pattern of a `Logger` per class since it seems to make it easier to find the code that the log statement originated from.  I suppose one could make the argument to aggregate log statements from private utility classes under a single label for parsing.  Not sure if that's the thinking that went into the original implementation.  @cprice404 - have any strong opinions on this?