The integer-arena approach (parallel global arrays) never freed nodes,
causing 6GB+ memory usage when running the self-hosted kernel. PHP
arrays don't shrink and we have no GC for them.
- Replace int-arena with plain Node objects so PHP's refcounting GC
reclaims unreachable subtrees automatically.
- Hash-cons Stem/Fork nodes to collapse duplicate immutable subtrees.
- Cache ofNumber(0..255) to avoid re-creating byte trees.
- Eliminate indirection (tag 4) nodes entirely; projection rules now
eagerly reduce and copy tag/a/b into the original App node.
- Remove all deref() loops — every node is exactly what it says.
Memory: 6GB+ → 24MB for `id "hello"` with runArboricxToString kernel