Make destruct pure.

I had added a `destructed` return value from `enforest` to get around the fact that `destruct` wasn't pure, but it was naive and problematic (it took the diff from `toks` and `rest`). I need to get the destructed syntax of the term to push onto `prevStx`. Since `destruct` mutated it's sources, it couldn't be called more than once on a term. This PR makes `destruct` pure by making copies in the cases where it used mutation, and removes the `destructed` reference from `enforest`.