Introduce a model to abstract SCM service integration

[finishes #80208778]
@dpetersen and I reviewed and agreed the code is good to go with the nil check mentioned above.