HOTerm atom fixes
the diff is unfortunately really noisy because functorising certain
stuff has really confused the algorithm.
three main things:
- lowering atoms where needed in substitutions (which requires
collecting `allowed` indices via `strip`)
- small bug fix in pattern match in `unifyTerm`
- functorising the other HOTerm stuff
on functorising: i chose _not_ to destructively constrain `Atom`
so that the `Atom` arg doesn't need to be passed around everywhere. not
sure if that's best practice, happy to add it back as a destructive
constraint if preferred.
currently, substitution is still broken in the UI. i expect that there's
a place a `reduce` needs to be added, just not sure where.