Upgrade to 2.0 version of tests.
Use setImmediate.
Throw TypeError on circular references.
Only retrieve `then` value once.
If resolved with promise, take over its state.

Closes #6.
Fully implement 2.3.3.3.1 part of spec.
Always check whether then is a function.
Use the promiscuous function as a sentinel.
Ensure that the promise is an object or function.