Add broken routing with dijkstra's

This algorithm usually finishes, but often returns infinite distances and
produces ridiculous incomplete routes. It may be that it's built on a flawed
concept of segments as both nodes and edges; the next thing to try is to make a
real graph of nodes and use the segments as the edges, with a couple tweaks for
the start and end segments.

I have also been avoiding the concept of directionality in the segments, but it
may be unavoidable now.
Fix crazy routing by supplying the right info to client
Improve client, multiple routes per load.