Idle Hands...

I added some extra processing to the Idle state.  If the node that the
agent is in becomes occupied (e.g. an asteroid has crossed into it),
then it will use a Dijkstra search to find a nearby unoccupied node and
seek to it.  Because of the spacing of the asteroids, this is almost
always one node away, so the movement is pretty fast and collisions
very rare.  Overall, the performance looks pretty good.

READY FOR THE SHOW
Improved Viewport Camera

One of the nagging things that I never fixed was moving all the
viewport tracking/zooming code into the camera.  I cleaned that up so
that now Main.cpp only manages calling/using the camera, not the
details of zoom/track.