Big commit -

Added compatibility for msvc and cdb. This involved adding a bunch of
macros to declare library symbols. This was done in a way that should
maintain cross-compiler compatibility. I also moved some template stuff
into header files so the compiler would stopp bitching. Finally, I added
and debugged a unit test for the simulation core. This covers the requirements
that it:

1. Correctly mathematically updates an object for time ticks. This is to
within a relatively small amount accuracy (1 out of thousands - floating
point operations aren't precise enough to be perfect).

2. move "partial" amounts - i.e. if the time tick is too large to move the
full amount in one tick, it moves the "correct" amount for this tick, and
stops. This isn't really the "right" way - it should get new tasks if it moves
too much in one tick, but that's not the point here.

More unit tests to come

Signed-off-by: null000 <gorha032@umn.edu>