3415: Python SDK can pass extra arguments to the client constructor.

This gives API authors more flexibility, and lets us write tests using
apiclient's built-in mock functionality.  This is needed to test
#3415.
3415: API exceptions from Python SDK include more error information.

The apiclient module doesn't give us a lot of opportunities to
customize error handling.  Request objects can have response
callbacks, but they only get access to the response headers, not body,
which we need to pass along JSON errors.  After that, apiclient.http
imports apiclient.errors.HttpError directly, and raises that directly
whenever there's a permanent error in an HTTP response.

arvados.api already makes a few monkeypatches to apiclient, and this
commit adds one more: it customizes HttpError's __new__ method to
return a new customized subclass instead.  This is pretty evil,
because it will mess with any other instantiations of HttpError in
client programs.  Its only mitigating grace is that the new subclass
is fully API-compatible with the original.
Merge branch '3415-py-sdk-api-errors-wip'

Refs #3415.  Closes #3478.