changed NFA and NFAState to Builder-esqe pattern