The concept of "todo and skip" is problematic. It's also technically
ok(1)->skip->todo; # ok 1 # SKIP TODO
ok(1)->skip("reason1")->todo("reason2") # which reason wins?
ok(0)->skip; # a failing skip?
ok(0)->todo->skip; # not ok 1 # SKIP TODO
ok(0)->skip->todo; # ???
And in order to save all that state requires nonsense states like
"skip_fail" so that ok(0)->skip->todo works. See the logic in Result->skip
and Result->todo to see the problem.
Instead, I think we need just one method to declare it.
The way results work has been reengineered since this was written. It may be rewritten again, but this doesn't make much sense as written.