Fixed M.!-related bug, introduced notion of fresh variable.

Also:

* Now using data-partition to manage variable equalities.
* Wrapped use of M.! with custom error message.
Cleaning up -Wall.