Fix following promises not getting updated (Promises/A+ 2.3.2).

This was a spec bug, exposed by the Promises/A+ tests. A simple scenario that would trigger it, using JS notation instead of spec notation:

```js
var fulfilled = new Promise(({ resolve }) => resolve());

var intermediate = fulfilled.then(() => {
  return new Promise(({ resolve }) => setTimeout(resolve, 100));
});

intermediate.then(() => console.log("this would never be called"));
```

We are now passing all Promises/A+ tests except 2.3.3 (#3) and 2.3.1 (#1), which is as expected.
Verified that emptying [[OutstandingThen]]s is unnecessary.
Factor out SetValue and SetReason.

This does not change normative behavior. It DRYs up the consistent "... and call `ProcessOutstandingThens`", and gives the opportunity to do an assert and some (unnecessary) cleanup.

Also general cleanup, e.g. moving notes below the steps, ensuring no line contains two operations, and rephrasing `CallHandler` to match the code a bit better.