reorganized training methods, fix to baum-welch

The Model.train method is now responsible to returning the total improvement for the training algorithm. Baum-Welch now only repeats for the correct number of iterations, instead of running once to get the score the first time. The training methods have all been switched to void methods, and do not return a log probability anymore. A Model.log_probability( sequences, path=None ) method has been added. This is a wrapper for model.forward( sequence )[ len(sequence), model.end_index ] basically, except it also works for infinite HMMs, can take in multiple sequences, and if you give a path for your sequences, will calculate the probability of the sequence given the path.