ECMAScript-ize; include more formal concretions.

The only slight change is that `[[IsPromise]]` now can be set to `undefined` for uninitialized promises, whereas it's set to `true` for initialized ones.
ProcessOutstandingThens → PropagateToDerived

Also add an assert to that algorithm.