Fixed issues with "mutate". Issue: Calling mutate on a tunable changed
the internal state, while the rest of the program expected it to retain
its state. The solution would be to create a deep copy or clone of the
tunable and mutate that instead.

However, note here that the "deepCopy" method doesn't really do full
deep copy; the function pointers in 'depList' still point to the
functions in the old tunable instance. This means that calling functions
like updateUnroll and updateBlock within 'updateEverythingFrom' will run in the
context of the old tunable, even if it is called within the cloned copy.
Hence, I've modified the functions to take as argument the tunable and
genList to be used. This fixes the issues observed.