VM snapshots

The ability to take a snapshot of a VM's memory image and disk state, and rollback to it an arbitrary amount of time later. This is complex because of the flexibility of storage configuration. It will require a snapshot API in our storage APIs, and careful checks in the main VM snapshot API that the underlying storage is suitable. eg we can trivially snapshot LVM, but not raw partitions