A correctness fix for today's list-speed improvement
The speed-up that shipped earlier today made reading and updating the fields of an item taken from a list much faster. It had one narrow flaw: when the item was declared the older way (with `var`, which unlike the modern `let` and `const` keeps existing after the loop that used it) and then read again after that loop, the fast path could hand back a value that was a step out of date. This release fixes that. The fast path now engages only for the modern, block-scoped forms (`let`, `const`, and destructuring), where the item cannot be read after the loop and the optimisation is provably safe, and it leaves the older `var` form on the reliable path that was always correct. The speed-up is unchanged for the common cases that make up almost all real code; this only closes the one case where fast and correct had briefly parted ways. Correctness before speed, always: a faster wrong answer is not worth shipping.