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.