New API

It's not complete, but a good portion of the new API exists and runs now. There are also a few changes to the old API and simulator (nothing too major, except making `SimModel`'s lists into sets). Check out the files changed tab for details.

This includes `test_new_api.py` that's a mirror of `test_old_api`. The matrix multiplication example isn't working in there yet.

Next, I want to make a few changes so that the old API shares more code with new API.

But yeah, this is probably good to merge and play around with.