The shape of an expression node.
This mirrors Expr exactly, replacing every Box<Expr> / Vec<Expr>
with ExprId / Vec<ExprId> and every ArmPattern with ArmPatternId.
Lower expr into an existing arena, allocating fresh ExprIds and wiring
child pointers within arena only (unlike naïvely cloning nodes from a
separate lowered arena, which would leave stale child ids).
Reconstruct a full Expr tree from the arena, applying the current
TypeTable values. This is the inverse of lower and handles
structural mutations (e.g. InvokeMethodLazy → Call) that occurred
during arena-based inference.