Refactor OAuthException and add additional OAuthException subclasses.

OAuthException is now its own error type.

Subclasses:

 * OAuthInsufficientScope
 * OAuthInvalidGrant
 * OAuthInvalidToken

Other changes:

* Raise _some_ OAuth exception whenever www-authenticate header is present on
  non 200 responses.
* PyApiTestUser* -> PyAPITestUser*
* Add a scope based test