[wip] Centralize authentication and HTTP logic on ServiceClient

Rather than rely on each service request to populate headers properly, it would make more sense to centralize the common logic in a `ServiceClient` method. This will also make it easier to implement automatic re-authentication or pluggable HTTP transport layers.

cc @jrperritt