Scratch Pool
Sequential scratch pool: hand out T instances in order during a single assembly pass, then reset the cursor at the start of the next pass to reuse the same instances. Distinct from BasicPool which is acquire/release-style — here callers don't release individually because they keep the acquired instances alive in a result list until the entire pass completes.
Grows lazily to the high-water mark across passes; never shrinks. Single-threaded only.