Create a 'fast' clone of a VM. This means we make
        a snapshot of the disk and copy some of the settings
        and then create a new VM based on the snapshot and settings
        The VM is transient so when it is shutdown it deletes itself
        :param VM: The VM to base this clone on
        :type VM: sham.machine.VirtualMachine

        :param clone_name: The name for this clone
        :type clone_name: str

def fast_clone(self, VM, clone_name, mem=None):
        """
        Create a 'fast' clone of a VM. This means we make
        a snapshot of the disk and copy some of the settings
        and then create a new VM based on the snapshot and settings
        The VM is transient so when it is shutdown it deletes itself
        :param VM: The VM to base this clone on
        :type VM: sham.machine.VirtualMachine

        :param clone_name: The name for this clone
        :type clone_name: str
        """
        disks = VM.get_disks()
        ints = VM.get_interfaces()
        count = 0
        new_disks = []
        for disk in disks:
            pool = disk.pool
            new_disk_name = '{0}-disk{1}'.format(clone_name, count)
            count += 1
            new_disk = pool.create_backed_vol(new_disk_name, disk)
            new_disks.append(new_disk)

        for inter in ints:
            inter.mac = None
            # if the mac is set to None we don't include it in the xml
            # and libvirt will autogen one for us
        return self.create_vm(
            VM.domain_type,
            clone_name,
            VM.num_cpus,
            mem or VM.current_memory,
            mem or VM.max_memory,
            new_disks,
            ints)