Promise: reimplemented to follow the ES6 proposal

Trying to make as much of a drop-in replacement as possible.
Still lacking .chain() from the strawman.
util/when: removed, now Promise.every()
Promise: implementation for .race()