feat: split queues API into public/admin

This change is made in prepartion for the upcoming sharded storage
features. Shard registration is a feature that only operators should
be able to do, and since the sharding is done within the queues
application, it was necessary to break this out into a separate API.

This patch adds a new configuration variable: admin_mode. It is used
to multiplex which version of the API is loaded. Furthermore, the
admin API is an enhanced version of the public API in that it allows
every route that the public API in addition to admin-only
endpoints. This should ease unit testing in future patches.

A few small refactorings were made, including:
- health resource moved to common transport location
- version module moved to common/transport
- pass config from bootstrap to transport driver
- pass cache in base transport driver
- convert base transport driver to use six.add_metaclass
- pass public bootstrap to bootstrap unit test

Change-Id: I0d6ff381afb25adb8a4b784a60b6d6eb71431245
Partially-implements: blueprint storage-sharding
Don't enable_echo when we don't have a tty

The following termios calls will fail (and unnecessarily).

Change-Id: I261ac4bbb6eac29df02bdd458aa65322ad81f316
Closes-bug: #1243845
feat: add shard management resource

This patchset adds a new resource that exposes shard registry through
the administrative API. Since there is no storage backend available
that implements this functionality yet, the shards resource is not
connected to the queues routes just yet.

Preliminary support is added for unit testing this soon.

Change-Id: I49793990327643fc2bc5091615fb0bebcef04bc0
Partially-implements: blueprint storage-sharding
Merge "feat: split queues API into public/admin"
Merge "feat: add shard management resource"
Update the Marconi readme with more detailed installation instructions

Change-Id: Ie9e8c8caf7fd92024a097b914aadb2ef75d75989
feat: shards storage controller interface

Adds the storage interface for the shards storage controller. This
controller is meant to be used with the shard management queues admin
API interface.

The idea mirrors that used in writing the proxy's partition manager.

This patch also introduces the distinction between data and control
storage drivers. Data storage drivers are those that control core
functionality: messages, queues, claims. Control storage drivers are
used to manage system functionality from the point of view of an admin
- in this case, the registry of shards.

The next patch will provide an implementation for mongodb + unit tests.

Change-Id: I4f24e84c99689968e60360383b190ce168055e74
Partially-implements: blueprint storage-sharding
Partially-Closes: 1241686
feat: shards mongodb driver + tests

This patch adds shard management capability to the queues mongodb
driver.

The storage API is also correctly split into an control and data
interfaces. The data drivers are loaded by default. The control
drivers are loaded as needed by the transport layer.

Unit tests are also provided to verify that the driver (and future
drivers) work as expected.

Change-Id: Iad034a429a763c9a2ce161f05c928b090ab58944
Partially-implements: blueprint storage-sharding
Partially-Closes: 1241686
Merge "Update the Marconi readme with more detailed installation instructions"
feat(logging): format msg when log level met

This is a feature supported by the logging module; just let the
logging function perform the formatting.

Change-Id: I9e349c6bda942474bfe73150b5abb8feb79ed574
Closes-Bug: 1232327
Merge "feat: shards mongodb driver + tests"
Merge "feat(logging): format msg when log level met"