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...