Change taskgroup key type to fn:Copy in prep for noncopyable stack closures.
Use more deriving(IterBytes) in libsyntax.
Use more deriving(IterBytes) in librustc.
'Borrow' stack closures rather than copying them (e.g., "|x|f(x)"), in prep for making them noncopyable.
Make librust satisfy noncopyable stack closures
Trade stack closure copyability for type soundness.
Add two tests for the case of the recurring closure.
auto merge of #7363 : bblum/rust/soundness, r=nikomatsakis

The commit f9a5453 is meant to be a temporary hold-over. Whether or not there is added a way for the compiler to "implicitly borrow" stack closures in this way, there should be a codegen optimization that prevents having to traverse possibly-very-many function pointers to find the function you ultimately wanted to call. I tried to separate out the changes so this particular commit could be straight-up reverted if auto-borrowing happens in the future.

r? @nikomatsakis