collect_commactor_routing_tree simulates how messages propagate
through a mesh of CommActors during multicast, reconstructing
the full logical routing tree.
Simulates routing from the origin through a slice using a
Selection, collecting all delivery destinations along with
their routing paths.
Each returned entry is a tuple (dst, path), where dst is the
flat index of a delivery node, and path is the list of flat
indices representing the route taken from the origin to that node.
Routing begins at [0, 0, ..., 0] and proceeds
dimension-by-dimension. At each hop, next_steps determines the
next set of forwarding frames.
A node is considered a delivery target if: