Link lifetimes in `let` patterns just as we do for `match` patterns
Extend temporary lifetimes if there is a ref in an enum binding
too.

Previously I had omitted this case since function calls don't get the same
treatment on the RHS, but it's different on the pattern and is more consistent
-- the goal is to identify `let` statements where `ref` bindings create
interior pointers.
Change expansion of `for` loop to use a `match` statement
so that the "innermost enclosing statement" used for rvalue
temporaries matches up with user expectations