Update Promise

- Promises/A+ compliance
- basic tests
It looks that way in Chrome. It's probably temporary. Firefox supports iterables:
```js
function* foo() { for (var i = 0; i < 5; i++) yield i; }
Promise.all(foo()).then(console.log.bind(console))
// Array [ 0, 1, 2, 3, 4 ]
```