This copies the parameter and changes all references therein so that when
they are evaluated, they are copied again. This ensures that everything put on the heap by a function that wraps all is parameters in deepDup can be freed after the evaluation.