An implementation of congruence closure, `CongruenceClosure`, which drives modifications to an arbitrary union-find ADT implementing the `UnionFind` trait.
Based on Nieuwenhuis and Oliveras [Proof-producing Congruence Closure](https://www.cs.upc.edu/~oliveras/rta05.pdf), except without the proof production.
A minimal [disjoint set forest](https://en.wikipedia.org/wiki/Disjoint-set_data_structure) implementation with dense `usize` nodes, `DisjointSetForest`, is also provided.