[#62380500] Support update idempotency for FirewallService, NatService

This pull request is for the first pass of the functionality whereby we do not attempt to update configuration if the remote config matches the local config to avoid an EdgeGatway outage 

This PR is getting very long so we would like to merge this and then address some of the outstanding issues, as discussed with @snehaso.

What this PR does do:

- update now checks for diff between local and remote config and if there is no difference, does not attempt to update
- update checks for diff on a by service basis and does not attempt to update services that have not changed but does update services that has changed
- NOTE - it removes description from NAT rule: 10a267ff6c <- this may conflict with your branch @snehaso 

What it does not do and we will separate on a different PR to stop this one getting too far out of control:

- diff method is not tested
- diff method is confusingly named (what it is being diffed against is implied not specified)
- update and diff duplicate work
- translate_yaml_input method is private and not tested; and has badly named variables
- count++ method of iterating through Edge Gateway services not best way of doing this (I intend to remove this functionality due to duplication, but Sneha has made a comment about a better way to do it if we do not remove this functionality)
- EdgeGatewayServices.edge_gateway_services is a class method <- if it stays in that format it should be a constant

We will address all these issues in a future PR or PRs.

Thanks,
Anna (editing original PR)