[#65271738] Refactor update

This PR pulls out much of the very long `EdgeGatewayServices.update` method out to another class, which has responsibility for indicating whether an update is required and generating the correct config if it is. Possibly those two functions could be split out further following SRP, but this refactor is holding up other work on the EdgeGatewayServices so I think it's worth punting that to later.

The main problem with this is if you don't call `update_required` the config is empty. Again, I suggest punting that to a later story to enable progress on this.

This refactor enables us to thoroughly unit test the functionality whereby update is not called if the config hasn't changed. As a third service is added there will be even more logic there, and since an update causes downtime it's important that we don't call unnecessary updates.

There are also tests for incorrect syntax. I'm aware this refactor is holding people up so I've raised a story for that instead: https://www.pivotaltracker.com/story/show/65628364