integrate branch parsing into single system call

The `git status --porcelain` command can take an additional argument `-b` which causes the porcelain output to also contain branch information in a stable and supposedly nonchanging way.

This change adds that argument to the initial `git status` call, and parses the branch/ahead/behind information from that.  The end result is the entire call to `git branch -v` can be removed, resulting in one less subshell command and hopefully a more reliable target across future versions of git.