Introduce a model to abstract SCM service integration

[finishes #80208778]
You may want to wrap these in a context, something like "when no template_repo_provider param is supplied"