Add IndependentDisk#attached_vms; disk integ tests

IndependentDisk#attached_vms allows us to know where a disk has been attached
to, so we can check that it has been attached correctly.

This method allows us to reliably test the attachment of disks to VMs, so an
integration test has been added.

NB: It is possible to detect Independent Disks attached to a Vm via the
Vm#vcloud_attributes call, by looking for a RASD OVF disk with a :vcloud_disk key,
but this is quite an error-prone and ugly process.
Add Vapp.get_by_child_vm_id constructor

At present, to create a Vm object you must also supply the parent
vApp object. This is technically unneccessary, since the vm retrieved
from the API knows this calready.

In the interests of not changing the interface of the Vm.new method
though, we must provide a way of discovering the parent vApp in order
to create a Vm object from a vm_id reference.

This work was prompted by the need to create a bunch of Vm object
from the output of the 'get_vms_disk_attached_to' Fog method, which
returns a list of Vm ids that a given independent_disk_id is attached
to. I could not return a list of Vm objects without a way to find the
parent Vapp of each.
Improve attach disk test; note ordering issue

Improved the VM attach independent disk tests, to check that
the disk was actually flagged as attached to the VM via the
IndependentDisk#attached_vms call.

In the process of this, discovered that the Vm#add_extra_disks method
fails if there are independent disks already attached to the VM. I
strongly suspect that this is due to the way the Fog Model handles
adding local disks rather than it being a limitation of the vCD API itself,
but fixing that is out of scope for this update.

Added a test to document this behaviour and the exception raised by Fog.
Rework size-suffix handling code - tests and name

It is better to test the behaviour of the helper method directly.

Also, since the helper handles integers as well, remove 'string' from the method name.
Do not allow creation of duplicate disks

The vCloud Director API allows you to create a rather nasty situation with
independent disks, as it does not enforce uniqueness on independent disk name
- even when they are in the same vDC. Once duplicate disk names have been created
in the same vDC, it is very difficult to tell them apart.

This commit adds code to IndependentDisk.create to check for a disk with the same name+vdc
combination before creation, and raise an error if it is attempted.

In the process, I have added specific exception classes for the various error cases of
the get_by_name_and_vdc_name() method.
Fix Rubocop error in integration test

:sadface:
Improve multiple-disks error message

IndependentDisks#get_by_name_and_vdc_name cannot handle the case where
multiple disks have the same name, in the same vdc. We try to prevent
this, but we cannot prevent it in the API. If the situation arises, the
IndependentDisk API can still be used, but the disks must be referenced
using the .new(id) constructor directly.
Rename 'post_upload_disk' to 'post_create_disk'

The Fog request method is incorrecly named 'post_upload_disk'. To prevent
propogating this error, use the correct name - 'post_create_disk'.

Fog will shortly be updated to fix this error too, with post_upload_disk
being deprecated.
Update CHANGELOG