Moved MarkovChain class to use Tokens, which don't expose distribution to the
outside world, and also allow users of this class to define their own types of
tokens