This is the new multithreaded BFS implementation using protocol
buffers. This has significantly improved performance of the main
thread, making the reader thread now the bottleneck in the system
once again. I have also modified the graph reader tool to take the
server span as an argument in an attempt to improve performance by
spreading the tables across multiple servers. This, however, has
not seemd to improve performance, at least not on first inspection.

Using protocol buffers has also had the effect of reducing the
memory footprint of the graph in RAMCloud.

Even with using multiReads, multithreaded servers, and spreading
tables over multiple servers, it seems I'm still hitting a barrier
of about 3us per read on average, for 20B/node on average for nodes
in the graph. At 10GigE that's 1.25B/ns... maybe with ECC and
various overheads it's 1B/ns, so we're talking a theoretical 20ns
minimum to read a node on average.

ellitron