Created step validation on step enter and step exit

Also updated testing, all tests pass.  You can specify step exit and step enter functions that must pass to continue to said step.  Omitting these functions will just allow step to transition with no validation.  You also have access to a "context" object which allows you to use data from other steps and validate against it to build current steps.