Longterm: Commit should happen regardless of op outcome
Longterm: Make the checkpoint handling more OO.
Longterm: Better separate EnvironmentImpl and Main