Simplify external/git commands, remove __chdir

The new `__run` method takes a hash reference which will (temporarily)
alter the environment for the rest of the arguments, which will be
passed to a subshell, with one exception: if the value for the
`use_system` key is set to a true value, then the `system()` function
will be used instead. The results of either of these commands has been
normalized such that `$?` will always be set to the exact exit status of
the command, and the STDOUT output of the command will always be
returned. The chief difference is that `system()` will have access to
the terminal that executed the command (ie, it can be used for
interactive commands), and STDERR will not be blocked. The __exec sub
now uses this under the hood.

The new __git sub takes advantage of the environment settings and the
GIT_WORK_TREE/GIT_DIR environment settings to completely avoid the
necessity of changing the working directory, making all the git
operations safer overall. As these were the only ones using it, the
__chdir sub is now gone.
Skip "blank" file when adding untracked

This wound up not preventing anything from working, currently, but I can
believe that at some point, trying to add a blank file name would result
in some otherwise-unexpected behavior.