Distributed messaging queue

First commit for a distributed messaging queue to super charge
performance. I’ve added some abstractions for node management. The goal
here is to scale concurrent writes so that the training algorithm can
distribute computation in a multi-threaded context. I’ve added a global
node cache that will provide higher performance reads and writes. When
writing to the cache a message is sent to RabbitMQ with the details,
that message is then processed by a set of worker roles and Neo4j is
updated. If a node is updated in the cache before a previous write
request has been processed by a worker role, that message becomes
invalidated.
Cache Rerouting

Rerouted all writes to Neo4j to a NodeManager class in preparation for
a high performance training modification that scales to all cores.
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.
Merge pull request #5 from kbastani/distributed-cache

Distributed cache