Training improvements

Massive changes to the training algorithms, including weighted states, edge inertia, pseudocounts on edges, and uniform pseudocounts added. Viterbi has been cleaned up significantly by having it be a special case of the more abstract training on labelled sequences method.

Other misc changes include adding the Model.log_probability() method, changing forward-backward emissions to optionally be tied, and transitions to give the expected number of transitions, and not the log probability. A MultivariateDistribution distribution has been added, for arbitrary numbers of independent features.