populateFreelist was more complicated that it needed to be. We used
to call to populateBatches that would do some internal shuffling and
add pointers one by one to the batches, but ultimately this was not
needed. We can get rid of populateBatches, and do processing in
bulk. This doesn't necessarily make things faster as this is not on the
hot path, but it makes the function cleaner.
Additionally clean up a couple of items, like UNLIKELYs and setting
Exhausted to false which can't happen.