block: add read-only support to VHDX image format.

This adds in read-only support to the VHDX image format.  This supports
reads for fixed-size, and dynamic sized VHDX images.

Differencing files are still unsupported.

The image must be opened without BDRV_O_RDWR set, because we do not
yet update the headers.  I.e., pass 'readonly=on' in the drive image
options from the QEMU commandline.
block: add header update capability for VHDX images.

This adds the ability to update the headers in a VHDX image, including
generating a new MS-compatible GUID, and checksum.
block: only force IO completion in .bdrv_truncate if we are not growing file

Only force the bdrv_drain_all() call if the BDS to be truncate is not growable,
or if we are shrinking the BDS.  Otherwise, if we are growing the file, allow it
to happen without forcing a call to bdrv_drain_all().

This allows .bdrv_co_writev() to sparsely allocate storage in a growable file
via bdrv_truncate().
block: add write support for VHDX images

This adds in write support for VHDX images.  This supports writing to
both dynamic and fixed VHDX images.  Differencing images are still
unsupported.