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.
One question though: don't semilattices and lattices involve partial orderings? When I went to look at this, it seemed like returning `PartialOrder[A]` was the right thing. What do you think?