Add multiple-path bi-directional BFS algorithm

The bf-paths generic algorithm returns all shortest paths from start to finish.

I'm using this for a fairly dense graph of actors in movies from IMDb data. It is very performant relative to a single-directional BFS that returns multiple paths.

There are several supporting functions in this PR as well that are useful in their own right, but that I didn't see in the library yet.

Thanks to @chouser for the `paths` function.