Refactor

This pulls out a bunch of the stuff I had done when adding in VCS support.

The core of this is abstracting logging and command running so that they're more flexible. This should help with the push towards "report more logging"