Train Pathfinding (READ THIS COMMIT)

unittests/dijkstra_tests.c is a pretty handy demonstration of how this
stuff works!

I've imported track_data.c. I assume the train oracle (who divines the
locations of all the trains) will need access to the train_data. Some
user task, (likely a shell of some sort) should tell our program which
track we're using and then call either init_tracka or init_trackb.

Our train oracle _will_ tell us the position of the train to some degree
better than sensors. AT LEAST to some piece of track. Which leads me to
this get_path output:

Through out_path and out_size, we get a sequence array and the sequence
length. A sequence is a struct (location, action). Simply put, when
location is reached (sensor or track piece), we take some action
(nothing, some switch action, reverse...).

CURRENTLY, our dijkstra only allows a REVERSE at a SENSOR. If you step
through the unittest output, you'll notice that this causes our train
to go PRETTY FAR out of the way before being back on the right path.
When our stuff is better, we can modify dijkstra to allow REVERSE at X
other locations.

Also means, we need to represent more positions than sensors so get_path
just takes in node_ids until we figure something better out. This also
means the output will use node_ids for location. You can still use
modular arithmetic to figure out what these node_ids mean for now.

It's pretty late. I wanted to leave something you could work with today
(Sunday) so if this stuff doesn't make sense, message me.

Cheers!