Add CheckpointReporter

Checkpointing is a great feature, but I think it's underutilized because it's not exposed as a reporter. If you're driving your simulation via the Simulation class, there's no non-programmer-friendly way to checkpoint every N steps.

Note, this doesn't work on python3 without #378.