HMM improvements

1. Faster HiddenMarkovModelTrainer.train_supervised (30-40x faster in demo_pos() example): 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.

2. more tests for HiddenMarkovModelTagger are added;

3. I think that probability calculations were incorrect for multiple observation sequences (they were not normalized);

4. when an initial model was passed to train_unsupervised the calculations were totally off because states and symbols of trainer and model was not the same - this is fixed; also, train_unsupervised didn't affect .tag if a model was used before (because of caching issues) - this is also fixed.