Make doIsPromiseSteal use then to make it more flexible in the thenables it takes.

This helps when we pass things to .wrap() mostly.
Use process.nextTick when possible (instead of setTimeout).
Makes the benchmarking code less brittle and more flexible.
Change benchmarks back to just being benchmarks.

Conflicts:
	test/benchmark.js
Change doIsPromise steal to be mostly back to how it was before.
Don't be defend the promises and deferreds.

Freezing objects we don't want frozen are terriblru.
https://code.google.com/p/v8/issues/detail?id=1858

Also, calls to defineProperties are awfully bad-ly slow.

With these things, we now kick Q's ass in performance.