Allow retrying some failed requests

Connection Errors can be transient and there are many clients (including
auth_token middleware) that allow retrying requests that fail.

We should support this in the session, disabled by default, rather than
have multiple implementations for it.

For the moment I have purposefully not added it as an option to
Session.__init__ though I can see arguments for it. This can be added
later if there becomes a particular need.

I have also purposefully distinguished between Connection Errors (and
connect_retries) and HTTP errors. I don't know a good way to generalize
retrying on HTTP errors and they can be added later if required.

Change-Id: Ia219636663980433ddb9c00c6df7c8477df4ef99
Make keystoneclient use an adapter

Apart from making keystoneclient follow the same patterns of using an
adapter that we are trying to push onto other clients this severs the
cyclical dependency between managers and the client object.

Change-Id: I49fbd50571f0c1484e1cbc3dcb2159d25b21b1bc
Make tests run against original client and session

The managers have a bad habit of reaching back into the client and
making assumptions about the values that are saved there. These
assumptions are not always correct when we use the session object.

Test all the versioned managers against a client that was constructed
with the old method and with a session object.

Change-Id: I93a26db7ae7e4d887aa815108be71c72b4a1f2bb