refactor for more modularity

This enables easier implementation for supporting more VCS
and choosing which changesource to use