Refactor type conversion

The way each opt subclass has to override _get_from_config_parser() just
to perform type conversion is lame. Add an explicit type conversion
callable attribute on Opt and pass it to MultiConfigParser when we're
looking up a value.

This will be useful in a future patch where we'll use MultiConfigParser
(renamed to Namespace) to look up CLI values too - since these get
converted by argparse, we want to avoid converting those values again.

Change-Id: I52003026e788e83c355af55accb73d02150a6b0b
Revert additions to ConfigParser public APIs

In commit 2e1c685, we fixed the MultiConfigParser breakage but we also
added to the public APIs of MultiConfigParser and ConfigParser APIs.

There's no reason to lock ourselves into supporting these new semantics,
so let's add them in a way that they're private to cfg.

Change-Id: Ief1e491590f022dc16cca78b2c4aa2d418aec68f
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