Fix the priority of CLI args vs config file values

Fixes bug #1176817

The API enforces a special requirement for CLI options - they must be
registered before the command line is parsed.

This means that as we parse the command line - and parse config files
specified on the command line - we can fully process CLI options whether
we find values for them on the command line or in config files.

This allows us to fundamentally change how we reconcile values specified
on the CLI with values specified in config files. No longer do we have
to first look at the set of values found on the command line and then
look at the values found in config files. Instead, we can treat all
values for CLI options as if they were found on the command line, even
if they were actually found in config files.

The long and short of this is that if you do:

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

then '--blaa' will override any value for the 'blaa' option in foo.conf
but we can also override the 'blaa' value on the command line from
within bar.conf.

Change-Id: I0a584a3c26ddadf24e3f473c773ee34a914667b3