refactor(client): Extract common code in displayError and displayErrorUnsafe, pass in a write strategy.

fixes #1402
Merge pull request #1403 from mozilla/issue-1402-refactor-display-error

refactor(client): Extract common code in displayError and displayErrorUnsafe, pass in a write strategy.
fix: Ensure a down OAuth server does not cause an `undefined` error.

Lots of changes under the hood:

* oauth-client.js: Convert jQuery promises to rest of the world promises to ensure compatibility.
* oauth-client.js: Convert server error responses to OAuthError based errors.
* oauth-client.js: Non-reachable OAuth server returns a SERVICE_UNAVAILABLE error
* oauth-errors.js: Add all possible oauth error codes, whether they are used or not.
* service-mixin.js: Work with OAuthError's instead of raw JSON responses.

fixes #1344
fix(client): Display `Service Unavailable` if the user visits `/oauth/sign(in|up)` and the OAuth server is unavailable.

fixes #1399
fix the jshint error.
fix(client): If logError/displayError/displayErrorUnsafe is called without an error, log an `Unexpected Error` & print a stack trace.

* Prevent users from seeing strange errors like "err is undefined"

fixes #1344