'for' loop hygiene, etc.

It turns out that bindings introduced by 'for' loops were not treated hygienically. The fix for this is to make the 'for' expansion more like a macro; rather than expanding sub-pieces and then assembling them, we need to rewrite the for and then call expand again on the whole thing.

This PR includes a test and the fix.

It also contains a number of other things:
- unit tests for other forms of hygiene (currently ignored)
- a fix for the isaac.rs macro that (it turned out) was relying on capturing
- other miscellaneous cleanup and comments
I'll give it a try. I worry that there's some hidden mutability that makes the clone() necessary and that the tests won't catch. Perhaps I should just have faith in the type system. If this one can go, I think there are a lot of other places where it could go, as well....