Revert to cmd.CombinedOutput all but ResolveRevision.

There is non-trivial error handling logic that depends on current
CombinedOutput approach. Care is needed to cleanly separate the stdout
and stderr while maintaining correct error outputs. There are many code
paths that need updating and testing.
Focus on fixing ResolveRevision only for now, which I can verify
locally.
Use divided stdout and stderr output in ResolveRevision.

Use stdout for parsing command output. This eliminates possible
warnings from ruining output.
Use stderr for parsing error type and printing error message.
I'm not able to reproduce "unknown revision" text while running `git
rev-parse <bad-commit>` with my local git version; however I do get
"fatal: bad revision <bad-commit>" on *stderr* when I try `git
rev-parse <bad-commit> --`. That text does not appear in stdout.