vast simplification of target bucketing

Instead of having a system for gathering potentially interesting paths in the
retriever and hacking the graph to try to trick it into not having cycles, and
then grouping them together after the fact, simply put the graph back the way
it was (with a link from objects to their location, not to their
ultimate-location), then call obtain() once to get the visual target, then
obtain() _from_ the visual target and tack the paths together to get the full path from the observer to all of the sub-components of the visual target.
get rid of VisibleStuff, it's sort of not necessary any more