Add support for lattices.

Since we started this project, Spire added support for boolean algebras,
heyting algebras, and lattices.

This commit adds type classes for these types.
I think we want to reverse this partial order.  `(0 join x) == x`, so we would say x join y == y means that x <= y, but currently I think we are returning 1 or 0, which means x >= y, right?