Do substitution/unification in a monad
Add substitution implementation for literals
Constraints (WIP)
removeMonoVars: move into a monad,

so that ambiguous constraints can be detected