Clarify the presentation of the CSE algorithm.
Improve sharing in CSE implementation.
Use IntMap where the keys are type Unique.
Make Bindings a proper ADT for clarity.
Also remove equal-but-unshared expressions in CSE.
Canonicalize commutative operators to find more sharing.
Eliminate idempotent operations.
Simplify operators that are constant on equal operands.
Track whether each subexpression is reused; inline if not.
Construct CSE variable names lazily.

Using the unique Int as the variable ID lets us use memory-efficient
IntSets.