Improve the detection for git cache expiration

This commit does a few different things. Most importantly, this commit creates
a fetcher object earlier in the software instantiation process. This permits
softwares which user path/git fetchers to pull down their version information
earlier in the build process.

Secondly, this commit introduces a new algorithm for calculating the tag for a
particular git cache. Software and Project now implement a #shasum method
which accumulates the uniquely identifable information and SHAs the
information together. Those SHA values are then accumulated, in order, as part
of the git caching #tag.
Fetch all softwares at the start of the build
Remove git directories before incremental caching
Cache the value we get from #version_for_cache
Clean up health check code
Define Logger#inspect and Logger#to_s for less messy output
Improve exception error when a software is missing
Add a config option for software_gems
Add a config option for local_software_dirs
Use the new configuration options when loading softwares
Refactor the way projects are loaded
Exclude build_version from shasum computation

Some build_version's are based off of a timestamp. Since build_version is used
in the shasumming at the project level (which is then used at the software
level), any project using a timestamp-dependent build_version would not
properly leverage git caching (it would always rebuild).

In the future, we will want to decouple build timestamps from versions.
Remove all instance of overrides_file
Debug logging
Improve logging and documentation for GitCache
Use 40 character left buffer
Don't align output on shasums
Show the list of software names instead of objects
Remove unused Vagrantfile.erb in generator_files
Improve generated omnibus.rb file