Parse config files in an argparse callback

Part of fixing bug #1176817

We want to have the priority order of config file value vs CLI argument
to be determined by where on the command line the --config-file argument
appears.

e.g.

  --config-file nova.conf --log-file nova.log

would mean that a log_file value in nova.conf would be ignored, whereas

  --log-file nova.log --config-file nova.conf

would mean the value in the config file takes priority.

As a first step towards that, we move to parsing config files in an
argparse callback while processing the CLI args rather than parsing all
the config files together after CLI args processing. This allows us to
know whether a config file was loaded before or after a given CLI
argument.

Even this introduces a change in semantics - previously, the files in
the directory passed to --config-dir were parsed after any of the files
passed to --config-file. With this change, we now have --config-dir
processed according to where it appears on the command line e.g.

  --config-file foo.conf --config-dir blaa.d --config-file bar.conf

means that the files in blaa.d take precedence over foo.conf, but
bar.conf takes precedence over blaa.d. This is obviously the proper
semantics and we were never happy with the current semantics, so this is
all good.

Change-Id: I421e2d0c2cc41f361832c997c6c2198eb92c07c3