code: public void star()
      {
          last.addEpsilon(first);
          first.addEpsilon(last);
          NFAState<T> s = new NFAState<>(scope);
          last.addEpsilon(s);
          last = s;
      }
docs: Changes this nfa to be a Kleenes star by adding epsilon moves from first to
  last and vice versa. Extra epsilon connected state is added at the end.
  This is to prevent future epsilon moves from flowing backwards. E.g (ab*)?