Add CLI option support to config fixture

oslo.config.fixture.Config has register_opt() and register_opts() but
not register_cli_opt() and register_cli_opts().

Change-Id: I8a1582dc0deb0230eb02b0894a49398f333375fe
Add oslo-config-generator

Add a sample config file generator utility. This is a dramatically
different approach from the generator in oslo-incubator, whereby we move
away from magic towards much more explicit control over the generator.

blueprint: oslo-config-generator
Closes-Bug: #1300546
Change-Id: I15686708fc9460948a58cfea3d18dae40ba1fda9
Merge "Add CLI option support to config fixture"
Merge "Add oslo-config-generator"
generator: refactor MultiStrOpt handling

This code was just confusing. Explicitly handle MultiStrOpt differently
from other types to make things more clear.

Change-Id: Ib6a01f76595c8874809c4d6db969ea8200d6fbb2
cfg,generator: add Opt.sample_default attribute

Some default values for configuration options are dynamic and
environment dependent. For example, an option might default to the
hostname of the machine.

However, such default values should never end up in a sample
configuration file - you don't want your hostname or path to your
personal home directory to be included in sample config files.

A simple solution to this is to add a 'sample_default' string
attribute which is used in place of a default, for those cases where
the real value is an unsuitable sample default. For example:

  cfg.StrOpt('hostname',
             default=get_my_host(),
             sample_default='myhostname')

blueprint: oslo-config-generator
Change-Id: I319d128a0a88b1197d8e2be105681f2b56240439
generator: remove the default sanitizer feature

Now that we have an Opt.sample_default attribute, it's not very clear
we have a good use case for the sanitizer feature. Any default that we'd
want to sanitize in this way could probably just use sample_default
instead.

blueprint: oslo-config-generator
Change-Id: Ifd02bb66a2033afdaa5812b15941d2d485165863
Add cfgfilter.ConfigFilter

Add a new class designed to wrap cfg.ConfigOpts, with the following use cases
in mind:

1. Help enforce that a given module does not access options registered by
   another module, without first declaring those cross-module dependencies
   using import_opt().

2. Prevent private configuration opts from being visible to modules other than
   the one which registered it.

blueprint: oslo-config-cfgfilter
Change-Id: I477f7027806d7630ce91159fb274f41c0c203770
Merge "Add cfgfilter.ConfigFilter"
Merge "generator: refactor MultiStrOpt handling"
Merge "cfg,generator: add Opt.sample_default attribute"
Replaced 'e.g.' with 'for example'

According to the IBM Style Guide the Latin abbreviation 'e.g.'
should be replaced by 'for example'.

Change-Id: Ie85eec0f028a927a635303f7c13e76fe52a92ff5
Merge "generator: remove the default sanitizer feature"
Merge "Replaced 'e.g.' with 'for example'"
Hook IPOpt class into the docs

Change-Id: I02b38b89f32db8b03a94467cdf5c6ff1c8865f2b