Switch FSM to using core.contract instead of just pre-condition. Not much of a win, but it seems like a great long-term improvement. This version fails on (reset) due to circular dependencies, which seems really weird