started adding usage tests
Few improvements with error handling and consistency with Tasks

- Having the entire promise wrapped in queue could mean that if emitting occurs between then and the next tick, then the handler would not fire

- Errors now persist in task until the completion handler fires

- Consistent error handling when a task is executed twice

- Better error message when a task's completion callback fires twice