Initial framework

Change-Id: I183a6fd41a1971158f237bc94666818fcb136765
Co-authored-by: Doug Hellmann <doug.hellmann@dreamhost.com>
Co-authored-by: Flaper Fesp <flaper87@gmail.com>
Support capping message versions in the client.

When doing a rolling upgrade, we need to be able to tell all rpc clients
to hold off on sending newer versions of messages until all nodes
understand the new message version.  This patch adds the oslo component
of this.

It's quite simple.  The rpc proxy just stores the version cap and will
raise an exception if code ever tries to send a message that exceeds
this cap.

Allowing the cap to be configured and generating different types of
messages based on the configured value is the hard part here, but that
is left up to the project using the rpc library.

Implements blueprint rpc-version-control.

Change-Id: Ia69db03a80dc3b1c63d52c7e163ea3cfec80c882
Implement a fake driver

A bunch of FIXMEs in here, but it seems like a good start.

Note that this differs from the original fake driver. Rather than the
driver consuming each message in a greenthread, we leave it up to the
choice of executor to determine how the consumer is run in parallel to
the client and we use thread-safe queues to pass the messages and
replies back and forth. The main reason for this is that we don't want
the driver explicitly depending on eventlet.

Change-Id: Id52e12be93c95b779695f62411f02f43d8480e4e
First cut at the notifier API

See:

  https://wiki.openstack.org/wiki/Oslo/Messaging#Emitting_Notifications

Change-Id: Icbc16c8b089158e398acebaac3c599fe529981b7
Add some test code

Right so ... it seems this stuff basically works!

Change-Id: I3c575ae9364e280e7523bc3856e5d6f1948826ad