Use git tree hash based "hash of hashes" for build avoidance

The idea is to compute a hash of hashes by taking the git hashes of all the sources and all the dependencies involved in building the current artifact and checking in an artifact repo if the artifact has already been built, and download it instead of rebuilding.

Gradle could take advantage of gits tree hash for every source directory it knows to avoid having to recompute the file hashes itself.