Multi-threaded goodness

Rewrote GraphManager as LearningManager which trains on multiple
threads. Recoding it revealed a classification bug. Now classification
performs better and is more accurate. Time to merge this puppy into
master.