Split Gitsh and InteractiveGitsh

The Gitsh class is in charge of the execution of git commands.

The InteractiveGitsh class provides an interactive wrapper around this,
with a useful prompt and empty line handling.

Also snuck into this commit: handle `$VISUAL`, `$SHELL`, and `$EDITOR`
being unset.