[ATR-21353] Refactor R3 feature access trigger navigation graph traversal to keep graph structure.
Follows on from !35260 (merged)
Similar concept to there, but a much larger refactor. Given how much more "work" ->features(...)
has to do vs. ::findLinks(...)
- Avoid flattening trigger navigation structure before feature-grabbing.
- Introduce new small transient DAG class.
- Populate DAG on call to features, filtered on the chain(s) and other options
- Change feature-grabbing to use this filtered sub-graph DAG
- Include early-escape efficiencies in this subsequent navigation.
- Aim to save substantial CPU in events with significant branching-merging-branching.
- Both in sub-graph construction (instead of locating all linear routes).
- And in sub-graph navigation (only explore from each node once)