Promises/A+ 1.1 compliance

This version implements a version of the unwrapping algorithm that ES6 will use in its promises. Instead of unwrapping promises/thenables in `resolver.resolve`, it unwraps after someone calls `then`. This is a lot more friendly to lazy promises and is compliant with version 1.1 of Promises/A+.

The gist of it is:

### resolve(x)
   * Set the status of the promise to `accepted`
   * Set the `_value` internal property to `x`
   * If there are callbacks in the queue, call `unwrap(x)`

### then(...args)
 * Add the callbacks to the queue
 * If the status of the promise is:
   * `fulfilled`, call `fulfill(result)`
   * `rejected` call `reject(result)`
   * `accepted` call `unwrap(value)`
 
`unwrap` recursively calls `then` on `value` if it's there, or fulfills/rejects the promise accordingly.