It has functionality to accept a Rule (guard logic) and a Command (transition
logic) as well as callables for the guard logic and transition logic .
callables are: closures, anonymous functions, user defined functions,
instance methods, static methods etc. see the php manual.
The guards are used to check whether a transition can take place (Rule and callable)
The logic parts are used to execute the transition logic (Command and callable)
Rules and commands should be able to be found/autoloaded by the application
If transitions share the same states (both to and from) then they should
point to the same object reference (same states should share the exact same state
configuration).