Lazy-init freelist headers

Summary: It's a clear regression to initialize a free header every time we
push onto the freelist (a few alu operations plus an additional store),
so do it lazily before parsing the heap.

This effectively moves the cost from the mutator to the allocator,
and the amortized cost depends on how often we parse the heap instead
of how often we free objects.

Reviewed By: @jdelong

Differential Revision: D1709018

Signature: t1:1709018:1417204521:321b84f8a86d857481d5487a0b22acff08dac47b
^^cmake phase never completed