Reverse args for calls to *Differ

Reverse the arguments in calls to:

- FirewallConfigurationDiffer()
- NatConfigurationDiffer()
- LoadBalancerConfigurationDiffer()

So that they are remote->local instead of local->remote. This will make the
diffs readable when we come to expose them. By being the "wrong" way round
it looked like we were removing rules when we were infact adding them.

This has no functional effect on the current behaviour of
EdgeGatewayConfiguration because a change, in either direction, is worthy of
triggering a new config for that service.
Expose diffs from EdgeGatewayConfiguration

Create a new class var/method which stores the diffs returned by the
service-specific differ classes into a hash which is keyed by service name.
The hash will be empty (no keys) when the local and remote configs are the
same.

This will be consumed by either EdgeGateway::Configure or EdgeGateway::Cli
in order to return the diffs alongside the services that need reconfiguring.
Return config diff from Configure#update

So that users of this class can inspect and present the diff for themselves.

This will primarily be for Vcloud::EdgeGateway::Cli, but may also be useful
for anyone wanting to use this gem as a library.

Shallow integration tests - check that it has the right keys and at least
one diff item for each - because we don't have any unit tests for Configure
and we need to know that this is working end-to-end. Especially because we
may not integration test EdgeGateway::Cli as the end consumer of this.

I've piggybacked onto the existing tests, some of which relate to "should
only make one call" or "should one create one task", because this is the
only place we have access to the diff (not the subsequent it block) and it's
too expensive (runtime) to duplicate these tests just to check the diff.
When discussed with Anna, we came conclusion that these weren't stretching
the existing descriptions too much.

The integration tests for the service-specific *Differ classes have been
removed because these new tests perform the same purpose more
comprehensively and without reaching outside EdgeGateway::Configure.
CLI output diffs with optional colour

Make the CLI tool output a diff of the changes between the remote config
(VSE) and the local config (file) that you're applying. This can be used to
determine what, if anything, changed during the run.

This is always returned to STDOUT. If you're not interested in it then it
could be redirected to `/dev/null`. The colour defaults to on in order to
make the additions and removals more human readable, but can be turned off
with `--no-colour`.

It's important to note that the output format is what's produced by
Vcloud::EdgeGateway::ConfigurationGenerator::* and NOT the config input
format, which means that it's much more verbose and doesn't contain exactly
the same key names. Unfortunately it's too difficult at this stage to
convert it back to the original input format.

I did consider rendering the output to YAML but there's a risk that people
might confuse it for the config format. I also considered pretty-printing
it, but all those nested hashes and newlines are going to produce a very
lengthy output. I think it is readable in it's current form though.

I chose to implement the render in EdgeGateway::Cli instead of
EdgeGateway::Configure or EdgeGateway::EdgeGatewayConfiguration because the
inner classes shouldn't need to have any knowledge about colour output and
it allows other consumers of those classes (treating it as a library) to
render their own diffs how they wish.
Refactor diff tests for Cli

Use shared_examples to DRY up the tests for Cli diff output. I'm about to
add another two tests like this and don't want the intended behaviours to
get lost in a sea of code. I'm `it_behaves_like` on the outter call so that
we get a meaningful name in the documentation and `include_example` on the
inner call which is hidden from the output. It looks as follows when using
`rspec -fd`:
```
  diff output
    when diff is empty
      when given config (colour doesn't matter)
        behaves like diff with stdout contents
          should output diff to stdout
    when diff contains two services with three types of changes
      when colour argument is not specified
        behaves like diff with colour output
          should output diff to stdout
      when given --no-colour
        behaves like diff without colour output
          should output diff to stdout
```
Default colour to off when redirecting STDOUT

Disable coloured output when STDOUT is redirected to something that isn't
associated with a TTY. It can be overridden with `--colour`.

This copies the default behaviour of utilities like `ls` and `grep` so that
the output isn't littered with ANSI codes when you're redirecting the output
to a file or piping to another utility for further processing.
Add dry_run arg to EdgeGateway#update

This will be used by EdgeGateway::Cli. Includes first set of unit tests for
EdgeGateway::Configure and an awful lot of stubbing.

I think this makes sense being an argument to #update rather than the class
initialiser. Because you might want to make two calls to update, one with
`dry_run=true` and then a subsequent one without.
Add --dry-run feature to CLI

To print the diff without modifying the remote edge gateway.
Amend help message for --[no-]colour

As noted by Matt, the word "on" doesn't quite match the values of "enabled"
or "disabled". Re-use the word "enabled" instead.

Also reverse the order of "enable/disable" to indicate that it would
normally be used to disable colour and to match the order of the arg spec
`--[no-]-colour`.
Merge pull request #84 from alphagov/64815308-diff_and_dry_run

[Fixes #64815308] Diff and dry run functionality