Add db.block_device_mapping_get_by_id

Add a new db API method for getting a block device mapping for a given
volume ID.  This is needed when Cinder calls over to Nova asking nova to
complete a snapshot operation on its behalf.

Related to blueprint qemu-assisted-snapshots
Assisted snapshots compute API plumbing

This patch adds the plumbing necessary to get assisted volume snapshot
calls down from compute.api down to a compute host.

Part of blueprint qemu-assisted-snapshots
Add an admin API

Add an admin API endpoint to Nova.  This is intended to be an endpoint
only exposed internally to the deployment.  It will be used for
integration with other services, such as Cinder or Neutron.

By default, the admin API listens on port 8776.  When adding information
to the Keystone service catalog, this new port should be used for the
adminURL.

As of this commit, the API exposed by this endpoint is identical to that
of the regular API.  However, hooks are provided for adding admin API
endpoint specific API extensions.  This will be utilized in future
commits.

Implements blueprint admin-api

DocImpact
WIP: Add os-assisted-volume-snapshots extension