A ruby FSM implementation that keeps logic separate from model classes and supports sub-states.