Refactor move classes to own file
Refactor to cover all cases correctly
Hide ExecuteResult
Allow OnError, Returning and OnSuccess in any order
Implement OnSuccessWithMessage