first pass of Outcome as an interface

see the changes to fsm_test.go to see how Deciders would change. 

Instead of manually constructing an `Outcome`, use `f.Goto(state, data, decisions)`,  `f.Stay(data, decisions)`, `f.Terminate(data,decisions)` and perhaps `f.Error(data, decisions)`

/cc @fabiokung  hows this look?
@freeformz probably just an artifact of rushing through building this thing :)

would love for you to take a pass through the whole codebase when you have some cycles.  any thoughts/feedback on this PR or master would be appreciated!