Rewrite Sun's error handling
Rewrite Sun's error handling

Summary:
It was previously a mess: non-Jenkins errors would often get reported as
Jenkins errors, sometimes we would report two errors, and we were doing a lot
of guessing that we didn't need to do.  Now we have a one-stop-shop for
handling errors: log anything useful (e.g. with `logHttpError`), and then throw a
`SunError` with the message to report to the user.  This way we can hopefully
report the right thing to the user all the time.  In particular, fixes the
issue that certain errors would cause Sun to return two error messages.

Test Plan:
Run Sun locally, send it some commands (some of which won't work,
see that we get exactly one error each time.

Reviewers: benjaminpollack

Reviewed By: benjaminpollack

Differential Revision: https://phabricator.khanacademy.org/D22369

Khan/slack-deploy-hooks,Khan/slack-deploy-hooks