Make DFAState and NFAState independet classes

* replace their Transitions() methods by __iter__
* adapt the interfaces
* use more appropriate interface for the use patterns of the DFAState
* more efficient DFAState representation brings 10-15% speedup on
  CPython