Update Promise

- Promises/A+ compliance
- basic tests
As per the ES6 spec, if `value instanceof Promise` and the constructor of `value` is the value of `this`, then you need to return `value`. See http://people.mozilla.org/~jorendorff/es6-draft.html#sec-promise.resolve.