Return BadRequest instead of UnprocessableEntity for volumes API

Changes exception from UnprocessableEntity to BadRequest when
input validation fails. Also raise BadRequest instead of a nova
exception InvalidParameterValue within the SnapshotController
create method. This is some preparation work to make sharing
unittests between V2.1 and V2 easier.

Partially implements blueprint v2-on-v3-api

Change-Id: I5c5b6f9680378d51f7fea054b52b99cd6cbe54b0
Backport v3 multinic tests to v2

Adds tests which were only added to the v3 version of the multinic
unittests. Also renames oddly named test file. This is prep work
for a follow patch to share unittests between v2 and v2.1

Partially implements blueprint v2-on-v3-api

Change-Id: I87ad4d7bfb2f65f60d812dbe29866f28f776145f
Convert multinic v3 plugin to v2.1

Changes required to have v3 plugin natively support
the v2.1 API.

add_fixed_ip -> addFixedIp
remove_fixed_ip -> removeFixedIp

Removes v3 version of the multinic test and changes to
share use of the v2 unittests code. Backports a v2.1 specific
test.

Partially implements blueprint v2-on-v3-api

Change-Id: Ie01eddf1e772092c291b1475404f87e6e6f47c71
filter: add per-aggregate filter to configure max_instances_per_host

Adds a filter AggregateIoOpsFilter which provides the ability
to read from aggregates metadata "max_instances_per_host".

DocImpact
Implements: blueprint per-aggregate-max-instances-per-host
Change-Id: I569aab7842d2c67042b89c75941a4664a599a7f6
Add v2.1 API router and endpoint

Now we have decided Nova v3 API interfaces are disabled and we will
change v3 interfaces to v2 ones for using v3 infrastractures as v2.1 API.
The big difference between v2 and v3 that v2 API URLs contain project-id
but v3 ones don't contain it.
This patch adds both an API router and an endpoint of v2.1 API to support
API URLs containing project-id.

This patch does not remove v3 API router and endpoint because v3 API tests
use it now. After moving all v3 code to v2.1, we can remove them.

Partially implements blueprint v2-on-v3-api

Change-Id: Iee75fbd8951c9f246f68a9c75d762335fa5c4b4b
Porting v3 evacuate testcases to v2

Ported test cases:
test_evacuate_instance_with_underscore_in_hostname()
test_evacuate_instance_with_empty_host()

and some other code refactor in evacuate v2 testcases.

Partially implements blueprint v2-on-v3-api
Change-Id: Ibe13526ef674869593a14c719062652f59ce2345
Fix the current state name as 'shutting-down'

Currently, the TerminateInstance returns the currentstate name
as previous state name. Ideally the TerminateInstance return
element's currentstate named as "shutting-down".

Addressed the issue and below is the terminateinstance response with fix:
==
<TerminateInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2013-10-15/">
  <requestId>req-c15f5c7d-2551-4a08-b8b8-255462a09592</requestId>
  <instancesSet>
    <item>
      <instanceId>i-00000001</instanceId>
      <currentState>
        <code>32</code>
        <name>shutting-down</name>
      </currentState>
      <previousState>
        <code>16</code>
        <name>running</name>
      </previousState>
    </item>
  </instancesSet>
</TerminateInstancesResponse>
==

And also updated the testcases in nova/tests/api/ec2/test_cloud.py
appropriately.

Closes-bug: #1322025

Change-Id: I790e7d86ef8fd9f4fc1612bae2788e0ae7ef9719
Merge "filter: add per-aggregate filter to configure max_instances_per_host"
Merge "Backport v3 multinic tests to v2"
Merge "Convert multinic v3 plugin to v2.1"
Merge "Add v2.1 API router and endpoint"
Merge "Porting v3 evacuate testcases to v2"
Merge "Fix the current state name as 'shutting-down'"
Merge "Return BadRequest instead of UnprocessableEntity for volumes API"