Optimize commutative operations.
Commutative unifications can fail fast.
Memoize coordinates for each domain.
cleanup and readme.