Implement OAuth authentication flow support

* Implement an Authenticator to handle OAuth interaction
* Get codes, retrieve and refresh access tokens
* Document public Authenticator methods