Versioning for git repositories

A utility class for tracking versions of repositories, to be used for any git repo we track.

This pr is meant for code review and discussion of what to add, it shouldn't be closed/merged until we've done these things.