Shortest path

A "parallel" implementation of bi-directional shortest path. This means it works for un-directed graphs where if \<A, 'is_friend_of', B> exists, then so does \<B, 'is_friend_of', A>.
It is parallel in that it explores multiple children of the BFS phase at the same time, but on the same core. This aspect is useful for large graphs where it is likely we will be hitting disk; as we can work on a different branch while those disk pages load. Since it runs on the same core, there is very little synchronization overhead (just scheduling).