Mark/compact: use a dynamically-sized mark stack, and don't do linear scan