Multikey indexes: array fields are now IXSCAN-fast
Summary: Indexes on array-valued fields now use per-element entries, so {tags: "python"} against {tags: ["python", "go"]} lands at IXSCAN instead of falling back to a full collection scan (v0.3.0a75).
Before v0.3.0a75, the moment any document on an indexed field carried an array value, SecantusDB flagged the index multikey: True and the picker simply skipped it. Every subsequent query against that field — equality, range, $in, even $lookup joins — fell back to a full COLLSCAN with a Python-side matches() filter. Correct, but the index was effectively dead weight.
With this release, Storage writes one index entry per array element plus a whole-array entry whenever an indexed field is array-valued. So {tags: "python"} against {tags: ["python", "go"]} now hits IXSCAN through the per-element entry, while {tags: ["python", "go"]} whole-array equality hits the dedicated whole-array entry. Range, $in, and $lookup against array foreign fields all benefit; compound multikey takes the cartesian product. The multikey flag is still tracked and still respected by sort acceleration (one-doc-many-entries breaks natural-order walks), but it no longer disqualifies indexes from regular query routing.