Check new target size against min size and max size.
Specify ntfs resize target in bytes. (#1120964)

This saves us the trouble of having to round in the correct direction.
Align end sector in the appropriate direction for resize. (#1120964)

When shrinking, align the end sector up to ensure the aligned partition
is still larger than the formatting's minimum size.

When growing, align the end sector down to ensure the aligned partition
is completely within the free region (and not larger than the formatting's
maximum size).
Allow generating aligned geometry for arbitrary target size.

_computeResize still defaults to self.targetSize, but this allows us
to pass any size in and see what the aligned geometry would look like
for that target size.
Split out code to determine max unaligned partition size to a property.
Require resize target sizes to yield aligned partitions. (#1120964)

New method StorageDevice.alignTargetSize can be used to modify target
sizes as needed to account for alignment.

Modify minSize and maxSize to return values that will yield an aligned
partition.