break up how refs get resolved
Stub out remote head
[git/repository] Expose remotes info
[git/repository] Control whether git commands raise on fail
[git] Allow repos to resolve remote refs
[util/subprocess/result] add #failed? and #succeded?
[git] Refactor resolve_* methods to return nil instead of raise

The code invoking the resolve methods had to call/rescue everything
instead of checking for nil. This commit refactors that code to indicate
failure by returning nil and let callers determine if an exception
should be raised.
[git/working_dir] deduplicate working dir update code
[git/working_dir] Fetch cache refs before checking out
Merge branch 'bugfix/master/track-remote-ref'