Where ranges overlap, don't give priority to the one found first

The right thing to do is to use the smallest (= most local) one. This
bug actually shows up prominently in the figures of the paper, sigh.
Be a bit more robust when relocating allocation spots

This hack is sadly still relevant. This makes it work for cases where
the block we return to doesn't have Core information itself. We now just
fall back to parents until we hit something useful.