Copy a bit of bluebird's API.

TODO:

- [ ] Unit Tests
- [ ] Detect unhandled rejections
- [ ] Stacktrace logging