Teach Branch to get a remote-tracking branch's remote.

The logic to get the remote of a tracked branch has more failure cases
then getting the configured remote for a local branch. This functionality
should be in its own function and return exceptions.