When a fix for #466 landed, it was necessary to escape slashes in branch
names with `;` because they weren't supported as a path component in
compare URLs. Now slashes are supported, but GitHub stopped supporting
semicolons as means of escaping.
In hub lingo, "origin remote" is the remote pointing to the canonical
GitHub project, i.e. where pull requests should be sent. "Remote branch"
is where hub guesses the user has pushed their changes from the current
local branch.
The origin remote can now be called "upstream", "github", or "origin",
in that order of precedence.
The `browse`, `compare`, and especially `pull-request` commands need to
know the remote branch. Previously we relied on git upstream
configuration, but that wasn't enough. This behavior is now only kept if
git "push.default" is set to "upstream" or "tracking".
For "push.default" values "current", "simple" (git 2.0 default), or
"matching" (git 1.x default), we can safely assume that the user
probably pushes to the same-named branches on some remote, and we ignore
upstream configuration.
To find the remote where the user pushed their changes, we search for
the same-named branch on:
1. the remote which points to a GitHub project owned by the current user;
2. "origin", "github", and "upstream" remotes.
When a match is found, it is assumed that the user pushed there and it
is taken as the implicit pull-request head.
Fixes#158, fixes#360, fixes#381