Introduce a model to abstract SCM service integration

[finishes #80208778]
Similar to the above, I'd go with something like ```after_initialize :set_provider```