doc: Recommend installing marconi via pip

This approach was recommended by mordred on the dev list recently. It
will ensure that the correct deps are installed, distribute is the right
version, etc.

Change-Id: I326053a511db76178d8e63908c3f2287d66c14b9
feat: Storage sharding foundation

This patch provides the plumbing for implementing storage
sharding across multiple backends. Sharding is agnostic to
storage driver type and transport type. The new feature is
optional, and disabled by default.

The design eschews placing any kind of sharding reverse proxy
in the network, allowing the storage drivers to continue
communicating directly with their respective backends.

Sharding can be enabled by setting the global "sharding"
option to True. Future patches will add a sharding section to
the config that can be used to tweak the way sharding works when
it is enabled.

Storage drivers are managed by a Catalog class. The Catalog is
responsible for registering and deregistering queues in the
catalog backend, and for looking up an appropriate driver,
according to which shard a particular queue has been assigned.

In the future, this design will make it straightforward to map
individual queues to different storage backends, according to user
preference.

FWIW, I considered enabling sharding by inserting the routing driver
as the last stage in the storage pipeline. However, it felt like
a hack for the following reasons:

  * Doing so orphaned the regular, solitary driver that was
    still always loaded at the end of the pipeline.
  * Since the bootstrap was not aware of the sharding driver,
    it could not be used to provide setup, so the catalog
    object had to be turned into a singleton and options
    had to always be loaded from the global config.
  * The driver would have to be added to each controller
    pipeline, and would have to always be the last stage in
    the pipeline. Introducing a simple "sharded" boolean option
    seemed to be a more straightforward, less error-prone way
    for operators to enable sharding.

Partially-Implements: blueprint storage-sharding
Change-Id: I5190211e81fe4acd311b2cfdd0bae806cc3fec81
fix(bootstrap): Logging CLI options don't work

In the current implementation, Bootstrap creates the config option
inside its initializer. That means that common options such as
those registered by openstack.common.log, are not registered.

This patch modifies the Bootstrap initializer to take a config
instance from the caller, rather than trying to build one
itself. This does two things for us:

1. Avoids "magic" marconi configuration; the caller has full
   control and visibility into how marconi is configured.
2. Allows for passing in the global CONF object from the
   marconi-server command and the reference WSGI app module
   so that common options registered by oslo modules on the
   global CONF instance are picked up.

Hopefully openstack.common.log will be modified at some point
so that it isn't tightly coupled with cfg.CONF.

Implements: blueprint remove-global-config
Change-Id: Ibb6638f99ca2ce4a2a6025f6cd41939bb30fa85a
Merge "doc: Recommend installing marconi via pip"
Merge "feat: Storage sharding foundation"
Fix Pep8 indentation errors missed by Pep8 1.4.5

Pep8 1.4.6+ finds additional indentation errors. Fix them in
preparation of being able to switch to a newer Pep8 version.

Change-Id: I50493675c33524e577a0eebf3f9b74037ed9721c
Merge "fix(bootstrap): Logging CLI options don't work"