Update OAuth2Error to inherit from base error

OAuth2Error looks like an error, behaves like an error but it's not
actually an error. This can lead to all sorts of erratic behavior if one
expects it to be an instance of Error. These changes are fully
backwards-compatible. The error handler has been updated to keep the
error response compliant with a typical OAuth response.

Several tests have also been added to the error class.