Introduce a model to abstract SCM service integration

[finishes #80208778]
This last bit with the two `#change` calls doesn't seem to work because `find_or_create` is not a callable object.