fix(launcher): allow afterLaunch to run async scripts

This was source of a bug before. 
In the single threaded case, we have
```
runner.run().then(function(exitCode) {
  cleanUpAndExit(exitCode);
})
```

run() returns `return self.exit_(exitCode);`. The fact that exit_ did not require the promise that held the exit code means in `runner.run().then(function(exitCode)`, exitCode is always undefined.