All tests pass. For the recur case we have a new dynamic
variable *recur-backtrack*. Now in `matrix-splitter` if
`*recur-present*` we check for `*recur-backtrack*` point if the
default matrix is empty. `*recur-backtrack*` doesn't change because
there maybe be more tests in specialized matrix that fail.

If there is a default matrix we reset `*recur-backtrack*` to it. When
considering the actual default matrix we don't consider
`*recur-backtrack*`, it's only needed in the specialized cases if for
some reason we fail "inside". This simulates what we use try/catch for
when recur is not present.

Note this means in the presence of `recur`, `match` is incredibly
exponential but there is simply little else to be done - otherwise we
cannot support `recur` without considerable additional complexity all
because we cannot throw across `recur`.

We don't forsee this as being a problem in practice, recursive calls
should not be made with recur in general - rather just plain recursive
calls which will grow the stack. Based on Will's description of Chez
Scheme's use of cata matching this doesn't cause issues for the
use of pattern matching in a compiler on real programs.