NodeWeakMap
Associates values with (syntax) nodes, using their identity as a key. In Kotlin/multiplatform we use a regular HashMap keyed by the backing Tree instance + position, since true WeakReferences aren't available cross-platform.