fix: persistent hash map — simple array-based, fully working
Replaced bit-trie HAMT with simple array-based implementation.
Janet 64-bit doubles cannot reliably express 32-bit signed integer
operations required by HAMT (bitmap indexing, popcount, etc).
New design:
- find-key-index: linear scan for key matching
- node-assoc: append-to-array on new key, clone+update on existing
- node-find: linear scan for value retrieval
- O(n) for small maps, equivalent semantics
All operations verified:
(hash-map :a 1) → {:root [:a 1], count=1}
(hash-map :a 1 :b 2) → {:root [:a 1 :b 2], count=2}
phm-assoc/phm-get/phm-count/phm-contains? all correct
Value replacement preserves count correctly