use associative lookup for faster NDFA -> DFA conversion

Example, previously:

   ?- time(valid(2*x2 + 3 =< 5*x3 /\ x3 =< x1 - x2 /\ 3*x1 =< 5 ==> 2*x2 =< 3)).
   %@ % 3,516,599 inferences, 5.253 CPU in 8.526 seconds (62% CPU, 669407 Lips)
   %@ true.

Now:

   ?- time(valid(2*x2 + 3 =< 5*x3 /\ x3 =< x1 - x2 /\ 3*x1 =< 5 ==> 2*x2 =< 3)).
   %@ % 6,178,239 inferences, 1.104 CPU in 2.403 seconds (46% CPU, 5594766 Lips)
   %@ true.