Fix bug 1088779: Fix ET error handling around views and tasks.

This refactors a lot about how ET errors are handled. They were being
converted to dicts of error information which needed to be detected and
dealt with by calling functions. Now they raise exceptions with proper
information attached that can bubble up in tasks to cause retries, or be
converted to error reponses in views.