Add an special case to represent identity substitutions
Add an special case to represent identity substitutions

We often like to `dropSubst` only to `substM` immediately afterwards.
But this causes us to unnecessarily traverse and rebuild our data
structures, even though that substitution is a no-op!

This commit adds a special unsafe representation for identity
substitutions that allows us to short-cut substitutions that we know
would not affect the term meaningfully. Doing so lets us save 12% of
all allocations on the kernel regression example and leads to a few % of
end-to-end speedup on average too.

google-research/dex-lang,google-research/dex-lang,google-research/dex-lang,google-research/dex-lang,google-research/dex-lang,google-research/dex-lang