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.