(much) faster HMM supervised training

HiddenMarkovModelTrainer._states and HiddenMarkovModelTrainer._symbols are lists so ``if state not in self._states`` and ``if symbol not in self._symbols`` are O(N). This is fixed by maintaining ``known_symbols`` and ``known_states`` sets.