Most of the code of the conservative GC can be reused for the precise GC. So before adding precise GC support, this commit just moves code around to make the next commit cleaner. It is a non-functional change.