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
DO NOT MERGE, debug logging
More logging
Remove git cache dirs on tag instead of incremental
More logging