Compiled loops for the rest of JavaScript

Loops that build literals, create closures, destructure, spread, pop or hold a for-of compile now, with rest and arguments functions and the Object statics; construction and Object.assign run several times faster.

A compiled loop declined whole when it held one instruction it had no arm for, and fell back to the interpreter. The sixteenth pass gave most of the remaining ones an arm, each through a helper that runs the interpreter's own code for the instruction: literals and instanceof and typeof tests (4515054f), closures (ebfb8db1), pop (496e23b8), destructuring, spread and spread calls (054f54d4), key lists and for-in (175e7299), then for-of, a finally and array constructors (85e8bd43). Functions with a rest parameter or that use arguments compile in Tier C (3a42a658), and so does code calling Object.assign, String.fromCharCode, the Promise combinators and the other statics (1e836768).

Construction got its own work: a constructor that only stores its arguments builds its object the way a literal is built (9470f615), and a compiled loop calls a compiled function without a frame (8d363095). Against v0.0.23, two million new Vec(i, 1) take 100 ms instead of 760, a million Object.assign({}, src) 140 ms instead of 830 (e9e314f7 copies a plain source directly), and async-promise-chain, 1.14× Node at the start of the pass, 0.94×. The 13 native rows take 2.6% less time overall, and the headline ten run at 0.88× Node 24's time with Zipp's median below Node's on every row.