If a functor provides bidirectional implementation (e.g.
hgraph), can use both directions for code generation.
During the computation of the edge-disjoing path cover of the rule
test graphs, selects one of the directions.
Thus bidirectional edge optimization completes bidirectional graph
functor edges in order to find better paths for code generation.
Thus the order of a rule test graph can be reduced to 1, if enough bidirectional functors are used.