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.