documentation, training, forward-backward

Significantly more documentation added to the beginning, some corrected to update changes to the module.

All kernel densities now allow weights for points in the init method, and also in the from_sample method. These effect both the log_probability and the sample methods. DiscreteDistribution also added.

Adding a 'viterbi_train' method was cumbersome. Wrote a wrapper for both train codes which allows you to specify which algorithm you like, meaning that Model.train() is now the only training code you use, making it back compatible.

Cython-optimized forward-backward algorithm pushed. Returns the estimated transition probabilities and sum-of-all-paths probabilities.

Forward and backward now return the full matrix instead of simply the sequence score. The sequence score must now be found using Model.forward( sequence )[ len(sequence), Model.end_index ] or Model.backward( sequence )[ 0, Model.start_index ]