refactoring source_control, better modularity

The trait VersionControlRepo to abstract over multiple VCS.
Now it should be straight forward to add support for mercurial.