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

In some cases knowing when the runner has finished is a requirement. Without it this [simple grunt task](https://gist.github.com/angelyordanov/8004180) that uses the runner directly would not be possible.