libvirt support for guest assisted snapshots

This implements volume_snapshot_create and volume_snapshot_delete
methods which create snapshots of QCOW2-based Cinder volumes.

Part of blueprint qemu-assisted-snapshots
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 35359.  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
Add volume snapshot delete API test case

Later in this patch series I'm adding some additional functionality to
the snapshot delete API.  I noticed that there was no unit tests for the
API.  Go ahead and add a base test case now that I can add more to
later.

Related to blueprint qemu-assisted-snapshots
Add os-assisted-volume-snapshots extension

Add a new API extension that exposes assisted volume snapshot
capabilities.  This extension is only enabled in the admin API by
default.

Part of blueprint qemu-assisted-snapshots