Basic Vagrant + Salt Stack + Apache setup

Go from nothing to having apache running in VirtualBox.  Now to add the
cabal state.
Basic cabal Salt state and module complete

The states let you install package, update the index and query installed
versions.  There is currently only one state which lets you make sure a
package is installed.
Flag support
Fix cabal install version parsing

We were parsing any old random version instead of the version of the
package we installed.  Also we made the code more robust to output format
changes.
Added states for haskell and gitit

Using are new cabal state we now install gitit!  What would of been a few
shell commands is now a hundred+ lines of python code.
Add author and description to more files.
Ignore the generated vagrant files.
Apache gitit configuration

This setup use the Apache proxy module to proxy to the local gitit
instance.  The state is heavily parametrized so that it can hopefully be
easily be used on another OS.
Cabal modules & states support user installs

For security reasons we don't want to have to run all cabal software as
root so we need to be able to run commands as root.  This updates the
cabal modules and states to use the the better internal salt command
API which lets us pick the user to run the command as.
Gitit salt states

This set of states makes sure that gitit is installed and can run as it's
own user, while apache forwards requests to it.  It also makes sure that
a repository is setup and that there is a proper configuration of the wiki
itself.
Cabal states and module now use versions

You can now install specific versions of cabal packages.  This will be
helpful in getting reproducible results.
Cabal uninstall module added

Really getting tired of not being able remove cabal packages.  This is
based on the "cabal-uninstall.sh" script found on the Internet.
Cabal absent state created for packages

This lets you make sure a package is not installed in cabal.  Helps work
around the lack of official uninstall support for packages.
Change cabal uninstall to be version specific

At the lowest level you now have to specify which version of a package you
want to uninstall.  The high level logic of removing all instances of a
package is now handled by the cabal.absent state.