Update Promise

- Promises/A+ compliance
- basic tests
This is missing the case of the empty array. `Promise.all([])` should be fulfilled with an empty array. Here you'd be getting a promise that is never fulfilled.