Fix up promise handling.

Per comments in #329 we can factor out the calling into its own function.

I also reused `this.resetTimeout()` instead of manually setting it, and added the timeout for promise case as well.
Remove .pending check in Runnable.

.pending is handled at a higher level, in Suite; checking it in runnable doesn't seem to add anything besides extra code.