Adding an external interface for the fiber scheduler. This allows us to use the fiber scheduler safely from a shared object without. This had to be done to prevent multiple instances of static / thread local state to exist. Wrapper implementations of the fiber based synchronization primitives can be added to extern_fiber.h, and implemented in fiber.cc to ensure there is only 1 definition (that of the server).
Adding a bi-directional shortest path implementation for Indy that uses the fiber scheduler to explore multiple children in the BFS in "parallel" on the given core. It is parallel in the sense that there are multiple search stacks (fibers) that execute on the same core (thread). When one blocks for IO, another can run.
The bi-directional aspect assumes that if the edge <A, 'is_friend_of', B> exists, then so does <B, 'is_friend_of', A>. A seperate implemetation can be written for a directed graph.
Cleaning up some unused code
using std::tuple_element_t
Merge pull request #245 from jmlvanre/short-path

Shortest path