Add AbstractVCSRepo class

Make the Git class an implementation of an abstract class.
Currently we're only talking about supporting Git, but when
we're implementing workflows for LilyPond projects it would be
nice to support other VCS too.
If we want this one would simply have to create a new derived class
implementing the API, and maybe implement a way to chose the right
VCS subclass for a given directory.