Uses better names for driver functions

Shells don't generally have a concept of namespaces, so it's often nice
to keep things together by using a common naming prefix.  Switch the
driver()-related functions to be driver_{something}, and the git-related
function to git_{something}.
Rewrites driver function to handle more commands

Organizes the control-flow of driver() to be less "case"-y.  Splits some
functionality into separate driver_{something} functions.  Adds some
better defaults.