gencgc: Pick out shrunk object tails earlier in conservative root logic.
* BIGNUM and VECTOR objects can be allocated overlarge and then
shrunk once the actual required length is known. This leaves a
"tail" of dead (0 . 0) CONSes. When this happens in large-object
pages (as opposed to normal pages), we can see that this has
happened and treat any pointer to such objects as not being a
conservative root.
* Unfortunately, where we currently perform this test we don't
have enough information available to easily say that the reference
is definitely to one of these dead objects, so we use a more
conservative test than strictly required.
* Add another test for the same situation, but earlier in the
logic, and using a more precise test, so that we can skip a bit of
extra work in such (rare) cases, and so that we can simplify the
overall logic.