setup.sh can now run specific setups

Moved all the specific functionality to functions.

Probably should change it to setup.d and have scripts and then run specific
ones and then bblah blah overcomplicated.
Update git completion automatically

Instead of having me decide git should be updated, the command now keeps track
of the version I've downloaded and checks that against the version of git
installed.