storage: implement two-layers of dm-snapshot in block-snapshot script
storage: implement two-layers of dm-snapshot in block-snapshot script

Have dm-snapshot of dm-snapshot. The first layer is to "cache" changes
done by base volume holder (TemplateVM in case of root.img), the second
layer is to hold changes do by snapshot volume holder (AppVM in case of
root.img). In case of Linux VMs the second layer is normally done inside
of VM (original volume is exposed read-only). But this does not work for
non-Linux VMs, orr even Linux but without qubes-specific startup
scripts.

This is first part of the change - actual construction of two layers of
dm-snapshot, not plugged in to core scripts yet.

QubesOS/qubes-issues#2256

QubesOS/qubes-core-admin,marmarek/qubes-core-admin,woju/qubes-core-admin,QubesOS/qubes-core-admin,woju/qubes-core-admin,woju/qubes-core-admin,QubesOS/qubes-core-admin,marmarek/qubes-core-admin,marmarek/qubes-core-admin,woju/qubes-core-admin