- visit_ was producing problematic results, because it visits every
subexpression. This means that for:
f x y z
it visits all of:
f x y z, f x y, f x, f
But, if we take prefixes for all of those, we'll always end up
eliminating only one variable, even if more are redundant.
- Instead of the above, use `visit` with a recursive procedure. This
requires some other modifications, because we need to manually recurse
into arguments of applied functions that aren't variables.
- Added a test case for the above trickiness
- Prefix should have been a newtype