Update Promise

- Promises/A+ compliance
- basic tests
`race` is different from `all` in that empty arrays do return forever-pending promises. The reasoning is that `Promise.race([])` acts as the 0 in its algebra. For example: consider:

```js
var result = Promise.race([Promise.race([]), Promise.resolve(42)]);
```
The result will be a promise fulfilled with `42` because the empty array is ignored.