Refactor the client (again) to better support auth

Allows consumers to provide their own transports for common cases.

Fixes #1499
Adds basic support for #1473
Hrm, I don't super love all of these fields for different auth smashed together here?  Break them up into per-auth type pointers to structs?