Add Support for OAuth2

Initial Support for OAuth.

authentication with alternate credential is still supported.

It supports getting (and renewing) acess tokens, but token management is the responsability of the caller since it requires state and persistence.