In http://dom.spec.whatwg.org/#concept-resolver-resolve add this for when the branding check fails:
* Let /then/ be null.
* If /value/ is a JavaScript object, set /then/ to the result of invoking /value/'s [[Get]] internal method for "then".
* If that throws an exception, invoke resolver's reject with the thrown exception and terminate steps.
* If [[IsCallable]] /then/, run substeps: ... setup callbacks and invoke /then/.
Now because this change resolver's resolvers can be invoked several times. So http://dom.spec.whatwg.org/#concept-resolver needs to account for that by checking and setting the resolved flag.
(Now we could see if there's some additional refactoring possible and we could even do away with the branding check altogether, but changing that would complicate the definition of then().)

> Now because this change resolver's resolvers can be invoked several times.
This is already true, I think, because of future initialization. E.g.
new Future(({ resolve, reject }) => {
resolve(1);
throw 2;
});