feat(runner): Allow onCleanup to accept a file

I can reuse this part:
```
      if (typeof filenameOrFn === 'function') {
        returned = filenameOrFn();
      } else if (typeof filenameOrFn === 'string') {
        returned = require(path.resolve(this.config_.configDir, filenameOrFn));
      } else {
        // TODO - this is not generic.
        throw 'config.onPrepare must be a string or function';
      }
```
But it's not possible to reuse the other parts because there are some differences:
1) exit takes in exit code and returns that if script doesn't return promise or number
2) exit script takes in exit code
3) only 1 exit script is ran vs multiple for onprepare -- so onprepare returns array of promises
4) exit script can return a number (to return), whereas onprepare can't

I can probably make runFilenamesOrFns_ generic enough to cover both onprepare and onexit, but it's going to make it more complicated instead of cleaner, especially the return bit. Alternatively I can only refactor out the snippet at the beginning of the comment.