feat(runner): return a promise from runner.runOnce

In some cases knowing when the runner has finished is a requirement (e.g. an async grunt task).