gitserver: abstract clone and fetch operations for different VCS
Created by: unknwon
This is the first (refactoring) step towards syncing depots from a Perforce Server. We need to abstract the syncer definition because clone and fetch requires different sets of commands to be executed for a Git and Perforce remote.
This PR does not add support for syncing Perforce depots yet but to put up for review to get people's eyes on whether the approach I'm taking makes sense.
Part of #16703