Fix 403 status response

Fixes Bug1153082

Change-Id: I1305d885751d4fa746e49cd5a76100c1900a9a53
Use webtest for v2 and v3 API testing.

The intention is to remain as close as possible to the original
implementation and so leaves a number of easy cleanups and optimisations
until a later patch.

In writing tests their are a number of changes for API tests that are a
result of webob/webtest restrictions:
 * response.body is now the string body and response.result is the parsed
   dictionary.
 * response.status is now a string eg. '200 OK', use
   response.status_code to get the integer
 * response.getheader no longer exists. response.headers is a dictionary
   like object that can be accessed (case independently) with [] or
   .get()

Working towards: blueprint extract-eventlet
Change-Id: I393b4bad2fd6eacc0b8ae98fc204d1323014b5e4
Merge "Fix 403 status response"
Merge "Use webtest for v2 and v3 API testing."