filepath.Join() just concatenates paths. We have to check manually for
an absolute path and discard the first component to end up with the
correct path.
Also, fix the tests to demonstrate actual behaviour of git, not what
filepath.Join() was doing.
Additionally, note that on Windows git paths in gitdir use unix
separators, so search for `/worktrees/` instead of using system
separator, just like when processing all the other cases.
Currently the git segment does not detect when an upstream is removed
(e.g., a PR is merged and the remote branch is deleted).
This change adds functionality to detect when upstream is removed;
if the status reports "branch.upstream" but no "branch.ab", it is gone.
The UI has also been changed to reflect this third state;
it now matches posh-git's behavior, which only shows the Gone icon
if an upstream branch is set but does not report ahead/behind counts.