Decouple dynamics engine

In this PR I decouple OpenMM objects from our core code. Really, this mainly involves creating a subclass of the OpenMM Simulation object, and moving some code from snapshot.py and simulator.py into the new object.

This allows us to easily switch to another MD engine if we want to. I’m doing this now because I want to play with some simple 2D models in the context of our MSM ideas, and I thought it would be easiest if I just wrote my own little MD code to handle them. More importantly, in the long term, this should also make it easier for us to add support for Gromacs or other MD engines to this package. It also means that in the (admittedly extremely unlikely) event of a major change to the OpenMM API, all the OpenMM-specific code is located in one place.

It now runs with the alanine example. I should probably add some proper tests and some more docs, but this will be the starting point for my toy dynamics.