Avoid some intermediate lists + comments.
Add special cases for when delta is 1
Use `Name` type synonym.
Add divisibility constraints to atoms.

This is in preparation for treating them more uniformly like other
constraints.
Add polairity to atoms, reduce number of predicate symbols.
Wibble: rewrite pretty-printing case
Rename `Pred` to `PredS`.
Change `Ct` from type-synonym to a `data` declaration.
Comments
Add some documentation.
Add a more efficient operation for adding constant integers.
Redo representation of formulas.
Implement the equality optimization.
Update user-facing interface.
Remove JList, it is not used anymore.
Use the correct version of `isTrue`
BUGFIX: Normalize binary terms after substituting
Handle the case when lower/upper bounds are empty
Evaluate atoms as we go along.

Hopefully, this results into more True/False formulas, and we can
use these to shortcut other stuff.
Propagate True/False in formulas.