Split task-completed into task-completed

Move from completed successfully and completed unsuccessfully to 3 resolved task states:
  * completed (implies exited zero)
  * failed (implies exited non-zero, or artifact missing)
  * exception (claim-expired, worker-shutdown, malformed-payload, cancelled)

`queue.reportCompleted` should continue to work as before. But the payload is now optional and `success` defaults to `true`. Overtime we'll remove the payload, so worker should start using `reportCompleted`, `reportFailed` and `reportException` instead of only `reportCompleted`.

**Note**, do **NOT MERGE THIS** yet, we still need to fix up handlers in the scheduler and treeherder integration. After that we can deploy and fix index + tools soon there after...
the title is definitely wrong... will fix right way...

> Also meta nit is both " and ' are used in this file.

Okay, this is one of those places where I'm borderline crazy... I like to use "" for strings that are human readable, error messages, docs, etc... And '' for strings that are identifiers, scopes, file paths, places where a spelling error causes a behavioral bug.