Make the heap_scavenge() loop a little tighter.
It's the customary two-way split: conses and everything else,
which handily eliminates the special case of fixnump()
while also unrolling the cons for maximum speed.
Non-conses are a little interesting if the car contains a Lisp immediate
because we have to scavenge 2 words, not 1. This works because of the
separation into heap_scavenge() versus scavenge() done previously.
Without that change, we'd have a problem as noted in scav_immediate about
accidentally reading 2 words when we meant to read 1. But that can't happen
on the heap, only on stacks, which don't use heap_scavenge().
i.e. if a character or single-float (on 64-bit) or unbound-marker
resides on a stack, scavenge() just ignores the thing.