Improvements around promises.

- Promises will no longer emit complete if already completed, they will just call the handler directly (solves issue of complete listeners firing multiple times instead of just once).

- Taskgroup now uses done to listen for completion on tasks.

- Destroy will now fire once complete