vmware: Storage policy based volume placement.

This change adds a new feature to vmdk cinder driver. Users will be
able to specify a vSphere storage policy in a volume-type. Creating
a volume with this volume-type associates the volume with the
storage policy in vSphere. The driver places this volume only on a
datastore that satisfies this storage policy.

Implements: blueprint vmdk-storage-policy-volume-type
Change-Id: I84585e7d5fc8b28f8cfed98cb621b5b6ce9435e0
vmware: check datastore availability during create

The vmdk driver does a lazy creation of the volume's backing vmdk
only at attach time. This is done to save on the huge copy cost
if the vmdk needs to be moved 'closer' to the VM instance at
attach time.

Still during a create volume call the driver needs to verify
availability of a suitable datastore that matches the given
storage profile as well as capacity to accommodate the given
volume size. This check needs to happen at three places - create
volume, create volume from snapshot and create volume from another
source volume.

Implements: blueprint vmdk-storage-policy-volume-type
Change-Id: I327bbc4930b4ab4e81627ac7bc48c2048e2078ee
Merge "vmware: Storage policy based volume placement."
Merge "vmware: check datastore availability during create"