Move functionality of ProcessUtil behind an interface: IProcessRunner.

- Add a default implementation: ProcessRunner.
- Update some of the callers to use the new interface instead of ProcessUtil.
    
The reason for this is to more easily test classes that fire off processes. We can easily mock the instance of the process runner and just verify the arg list/environment/input/working dir. With a singleton ProcessUtil and static methods we can't "swap" it out with a mock to do this.