Call `suite:end` even if `runContexts()` gets rejected

In case some promise is rejected inside `TestRunner.runContexts`, the `suite:end` event would never get emitted - this causes the runner to hang, as nothing ever really checks for the promise result.