Introduce a model to abstract SCM service integration

[finishes #80208778]
I think it'd be more clear if this was something like ```after_initialize :set_name```.