feat: add user-defined fallback procedure for the `grind` tactic

This PR introduces support for user-defined fallback code in the
`grind` tactic. The fallback code can be utilized to inspect the state
of failing `grind` subgoals and/or invoke user-defined
automation. Users can now write `grind on_failure <code>`, where
`<code>` should have the type `GoalM Unit`. See the modified tests in
this PR for examples.
11 files changed