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`.