[flang][OpenMP] Track reachable metadirective replacements
Semantic checks currently consider each statically applicable metadirective
replacement independently. This can diagnose lower-ranked replacements that
selection can never reach, and nested construct selectors cannot observe a
directive selected by an enclosing metadirective.
Use shared candidate ranking to retain only reachable replacements. Track each
effective directive path separately and propagate reachability to nested APPLY
transformations. This lets nested selectors observe selected contexts without
combining mutually exclusive paths.
Assisted with codex.