Add transport reconnection retries

When a rpc client try to make a RPC call and the server is unreachable
The rpc call hang until the server come back.

In most case this is the desired behavior.

But sometimes, we can prefer that the library raise an exception after a
certain number of retries.

This patch allow this.

Closes bug #1282639

Change-Id: I32086d0abf141c368343bf225d4b021da496c020
Full support of multiple hosts in transport url

This patch add the support of multiple hosts in transport url for rabbit and
qpid drivers. And also fix the amqp connection pool management to allow
to have one pool by transport.

Implements blueprint multiple-hosts-support-in-url

Co-Author: Ala Rezmerita <ala.rezmerita@cloudwatt.com>
Change-Id: I5aff24d292b67a7b65e33e7083e245efbbe82024
asyncio poc

Change-Id: I46c016e43b47932d5933dabb80d605c0114e9b9d
Add a new asynchronous executor based on Trollius

The executor runs the asyncio event loop in a dedicated thread. It is possible
to specify an asyncio event loop to avoid this thread. For example, it is
possible to use the greenio module to create an event loop running in greenlet,
and so run the asyncio event loop in the main thread. The callback and
incoming.reply() are executed in the same thread than the event loop.

incoming.reply() can be called in a pool of thread, but this feature is
currently disabled (until I fix the stop issue).

The changeset implements the asyncio blueprint:
https://wiki.openstack.org/wiki/Oslo/blueprints/asyncio

Trollius is a port on Python 2 of the new asyncio module of Python 3.4 which is
also known as the Tulip project (written for Python 3.3 and later).
Documentation of the asyncio module:
http://docs.python.org/dev/library/asyncio.html

The patchset adds a new dependency, the "trollius" module. Trollius is already
part of the global requirements file:
https://review.openstack.org/#/c/70983/

Currently, my test program hangs at exit because the threading calling
listener.poll() is blocked.  I created the following issue to add a timeout
parameter to Listener.poll(), so the thread will be able to exit:
https://review.openstack.org/#/c/71003/

Change-Id: I3815673aad35c560d7e7df2fa2a6601a1bbfb773
Implements: blueprint asyncio

Conflicts:
	setup.cfg
Add an optional timeout parameter to Listener.poll

For asynchronous programming, a timeout parameter is required on the listener
to allow to stop it at exit. poll() returns None on timeout.

It plan to use it in my new asyncio (Trollius) executor:
https://review.openstack.org/#/c/70983/

See also the related blueprint for the rationale:
https://wiki.openstack.org/wiki/Oslo/blueprints/asyncio

Change-Id: I918ae3c267743a0eaed1d6a210c79fb4a0eb8733