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

Change-Id: I8d551f145198107fa1c569360f081ff3eb9a7bb9
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

Change-Id: If3f011e2db14235f4137c9d9cb610f0c4cd7954a
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

Change-Id: I18d89b16c3e4bbbb2cdf3fe70c958f7e671e78ec
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

Change-Id: Ib9c22cd970d598b34618d9c91c779477aa1d4004
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

Change-Id: Iff4e4c0e7de48d5375d66271dfc8ad4cbdff2a31
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

Change-Id: I79e22ab6ef66fa16dc534a4336e766065702b2f5