Use the UEFI shim to load grub.

For UEFI Secure Boot support, we need to install the shim pre-boot
loader, and use it to load grub2.
Add a convenience method for new btrfs subvols and drop subvol size args.
Add a method to estimate disk space needs for a new logical volume.

Also moves default extent size and default pv metadata size to a
constant defined in devicelibs.lvm until we get a way to query
lvm for this stuff.
Add a function to estimate required disk space for an md array.
Add size-set managers to keep a set of growable requests in sync.

SameSizeSet is for mirrored container devices, and ensures that
all members in the set end up the same size.

TotalSizeSet is for non-mirrored container devices, and tries to
achieve a target combined size for devices in the set.
Add support for creating device based on a top-down specification.

General Approach:

Instead of an all-or-nothing approach, the goal is to come as close
as possible to satisfying the new device specification. Once the
container has been allocated, we simply adjust the new device's
size as needed to fit in the container.

This uses growable partition requests, but it then fixes their size
as soon as they have been allocated. It also changes doPartitioning
to reallocate container member devices each time instead of fixing
them on disk once the container is defined. Since the members are
not growable anymore once the container is defined, this is less
disruptive than it would otherwise be. It allows for maximum
flexibility to allocate the set of requests while still preserving
already-defined containers' sizes.

Notes:

Creation of md devices is completely untested.

Creation any device (md, lvm, btrfs) with striping, mirroring, or
any other RAID-like features is completely untested.

There is no support for container members of any type other than
normal partitions.
Fix subtraction for Size.
Add a method to produce a deep copy of a Storage instance.
Fix DiskLabel so it can be deep-copied.
Add a method to retrieve a devicetree device by id number.
Track requested sizes of btrfs subvols.

This is just so that removing a subvol in the custom ui has the
expected result of shrinking the container to just large enough
to hold the remaining subvolumes.
Use a copy of the main Storage instance during custom partitioning.
Move setup of new partition weight arg to Storage.newPartition.
Make it possible to call setUpBootLoader safely at any time.
Streamline autopart request setup slightly.

The storage instance contains a platform instance, so there's no need
to pass one in explicitly.

Also, setDefaultPartitioning seems to be a good place to set fstype
for boot requests only once.
Make sure we allocate partitions and grow lvm as needed in kickstart.
Remove old ui progress args from devicelibs.btrfs.
Remove shrink code that was a workaround for the old ui flow.
Base auto-generated name prefixes on productName, not device type.
Make sure the ksdata autopart type matches the storage one.