~25% better freeze performance

I noticed that a large amount of time was being spent in iteration, and the overhead associated with the scratch write buffer seems to be more than offset by only having to do one iteration. The key/val change doesn't make much of a difference to the benchmark, but that is the more efficient access idiom, so I figured it wouldn't hurt.

If you're interested, I can keep looking at this for more potential improvements.  This was just the product of a few hours after @aphyr pointed out that it was slower than he had expected.