safe_log Sanitize Passwords in List of Dicts

Sanitizes password fields found in lists of dicts for messages
before logging.

This change uses oslo.utils.strutils.mask_password to do it.

Change-Id: I7cd1e53e2ced7ebf9c5942b7a0dbbeb991acab4d
Closes-Bug: #1268459
Add a thread + futures executor based executor

The concurrent.futures module is one of the ways
that async activities can be done in the future,
so we should try to work on getting to that future
by using more futures. To enable this (as well as
to enable getting off eventlet), add a thread pool
based executor which will process incoming messages
using the pool.

Also begins adding according docs as well for the
different types of executors that are available.

Change-Id: I1482fd70abbf69f4e2994597c5e95d91fecb815e
Enable IPv6-support in libzmq by default

Change-Id: I53790e5492ebf026e0b331ecb3c294da89603540
Closes-Bug: 1389137
Merge "Add a thread + futures executor based executor"
Merge "Enable IPv6-support in libzmq by default"
Merge "safe_log Sanitize Passwords in List of Dicts"
Required pyzmq for 0mq driver

It is possible to import `zmq` module from `eventlet.green` only if an
actual Python interpreter has pyzmq package installed. But `zmq` object is used
within driver unconditionally. Using of `try_import` and obtained
NoneType object instead of `zmq` object causes raising of unobvious exceptions
all around the driver.

Current solution: Fixed `zmq` import from eventlet.green. 'pyzmq' added to
requirements. We need it to test the module. If dispensable imported object
used unconditionally we can stumble an `AttributeError` with `NoneType`.

Alternative: we can continue to use `try_import` with some restrictions.
Before any code from the driver module be used we need to check is `zmq`
not `None` and if it is - raise `ImportError`. If we will not add `pyzmq` to
the requirements we couldn't test the driver with CI gates.

Change-Id: Ib3957a736b0dca2279f439f2099374d2adbf1659
Closes-Bug: #1373350
Reduce global CONF usage in zmq driver

Reduced usage of global CONF object. Implemented a decorator for lazy
options registration. Each essence uses config options is independent
from others. Registered two options groups for zmq driver.

Since this patch the tests require `eventlet`. `eventlet` added to
test-requirements-py3.txt.

Change-Id: I2905cb288617052bf1c039aef000aeeee6468e15
Closes-Bug: #1373382
`publisher`function separated into ZmqProxy method

In the `consume` method of ZmqProxy class declared a function named
`publisher`. This function contains reach socket data sending logic. This
function became the instance method named `_publisher`.

Such an approach is much easier to test and improve logic of the
function.

Change-Id: I769f0616726785a6b0e60d84072f7446b5a29e34
Topic object

Topic manipulations are significant part of Zero MQ driver. All of these
actions were performed in-line as string operations. This kind of design
is very difficult to debug and modify. We to have a single entry point
for topic to reduce the described issues.

* Created Topic object with appropriate methods to manipulate and control topic
value.
* Extended Target object to use Topic object with normal Target
features.
* To restrict and standardize topic length used md5 hexdigest (with length of
32 chars) value as base topic name. md5 used to have guaranteed the same
value for the same seed in different threads or even nodes.

Closes-Bug: #1367614
Change-Id: I5e7d379e543fd2fd14956482542fe074e9fbca17