Abstraction layer for scm/git

This will allow to add different scms, such as mercurial