Handle thenables that fulfill with themselves.

Without this change, thenables that fulfill with themselves would cause an infinite loop in the spec algorithm. Real-world examples of this include far references from Q (i.e. where the promise represents a reference to a remote object), or promise-entities from Ember.js.

Thanks to @erights for discovering this.
Allow vicious cycle detection.
Mandate `[[Resolve]](p, p)` to throw a `TypeError`.