Adding image multiple location support

Images now support multiple locations within its metadata and it may be
stored on more than one backend storage. Nova should add a layer to
transparently handle image preparing and removing for an instance by the
best approach/location, and it should allow administrators to configure
the image handler pipeline with the order who preferred to the layer.

Also, based on this structure we could implement particular sub-class in
relevant hypervisor layer with more advanced functions, such as CoW
making, snapshot capturing and etc. in future.

Implement bp: image-multiple-location
DocImpact

Change-Id: Idce8d21ae37bfdbb28a2567120a83d1061061904
Signed-off-by: Zhi Yan Liu <zhiyanl@cn.ibm.com>

Conflicts:

	nova/hacking/checks.py
VMware: Use the image handler to fetch images

The VMware driver should use the common image handler pipeline to
retrieve images from Glance.
This patch is a first step to provide the zero-copy functionality to
the VMware driver.
The next steps:
. leverage the location returned by the Glance VMware storage backend
to avoid a network copy
. Use the image_hanlder to upload images from the datastore to Glance

The patch partially implements bp: image-multiple-location

Change-Id: I17fb0f96f0fc0d7c1d97c6e442ec3c34e90d525c

Conflicts:

	nova/tests/virt/vmwareapi/test_driver_api.py
VMware copy image handler

The VMware driver should take advantage of the Glance VMware
datastore storage backend in order to avoid a download of the
image from the Glance store to the VMware datastore.
This patch is the implementation of a copy image handler  using
the location URL provided by the V2 API of Glance to directly
copy the file on the VMware datastore in order to spawn the VM.

The patch partially implements bp: image-multiple-location

Change-Id: I6c4231c70ef4e6a95817fdb3baa2725837f2003e

Conflicts:

	nova/virt/vmwareapi/vmops.py