add an abstraction layer for SCM support

Gaurav, I'd like to add a bit of a higher level API to serve as an abstraction over source control management in Spark. I think this'll help us manage a bit better how to integrate Git into Spark. In particular, I think this will help as a bit with #631, in terms of knowing what operations and actions are available for different projects. This PR is a stab at that abstraction layer; I'd like to get your thoughts!

@gaurave for review