add exit callback on current state. as opposed to after callback on to_state
add on_transaction callback
refactor test setup