(TK-27) Allow user to manage clients explicitly

This PR will allow the user to explicitly create instances of a sync or async client, and then use those clients for multiple http requests. All the previous APIs remain intact; if the user uses the old http request functions, things will behave as they did before (i.e., it will create a new client and close it once the response comes in).
These tests would all still pass even if a new `default` client was being created behind the scenes for each of these requests, right?  Can we think of a way to test this that would ensure that the client was being re-used?

A few ideas that might work:

1. call 'close' on the client and then try to make another request, and assert that an exception is thrown
2. start jetty with only an SSL connector open, and create the client with the necessary ssl settings.  Then, make all of your requests via https, and don't pass the ssl settings into your calls into the request function.  Then you will know that it's re-using it unless you get an ssl error.