Use a BitSet to represent final states.

Rationale: BitSets are (obviously) faster than (Hash)Set<Integer> and do
not use more memory in the general case.

The final state bit set uses one bit per automaton state. In a small
survey using different word lists, I found that about one in nine states
is a final state. Add to that that a HashSet has more overhead (boxed
integers, etc.) and the BitSet representation is smaller in the general
case. Of course, YMMV a bit on dictionaries with only very long strings.