(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).
Trying to grok what happened that required the type of this argument to change from ClientOptions to RequestOptions.  I think I was envisioning that if there were some client-specific options that we didn't have captured in the schema for that yet, then we'd expand the schema.  Is that doable?  We can talk through this in person if that doesn't make sense or if I'm misunderstanding something.