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.
these are also commutative semigroups. Can we add method to convert a Semilattice to a CommutativeSemigroup?  Similarly with Bounded to commutative monoid?

Also, this is a super useful type, so adding documentation would be huge.

Thought: should we just put off the documentation until we think we have it pretty ready to publish? That way we don't document things we don't need.