[Test] Add term mangling
We have name mangling tests, we should add similar ones except for mangling arbitrary parts of terms, so that we can declaratively specify what kind of transformations turn a well-typed term into an ill-typed one. The simplest example would be substituting a variable with a term of a different type -- that should never type check in TPLC or PIR.
This is important, because we don't really have any good tests for type checking errors, since PIR generators only produce well-typed terms and we don't have many unit/golden tests either. And we just recently had a nasty bug related to a type checking failure.
This will probably require some interesting tech to pick an arbitrary part of a term, tree-like structures aren't particularly well-suited for that, but I guess we can just enumerate the nodes and pick an arbitrary number within the resulting range.
We'll also need to figure out whether arbitrarily changing a type to a different but still well-kinded one is supposed to always give a type error. I suppose there generally will be plenty of corner cases to consider.