Refactor MergeRequests::MergeService to separate out service classes
This was raised as a pre-requisite for Fast Forward Merge Trains
Background: Adding FF Merge train implementation logic to MergeRequests::MergeService is made tricky by the self-referential inheritance. This makes anything we do a "monkey patch" to get it to work.
To properly fix this, we'll need to refactor the base class to separate out the different merge strategies.
Then after the refactoring is done, we can implement FF Merge Trains logic ontop of it.
There should be a rollout issue for this, as it touches a lot of base code for merges
Edited by Max Fan