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 didn't think so, although maybe you're right.

My reasoning was that in the case of going from `Semilattice[A] => JoinSemilattice[A]` the author is saying *take this semilattice and treat it AS IF it were a join semilattice*. Whereas in the other case, you'll usually be talking about `Lattice[A] => Semilattice[A]` in which the author is saying *this lattice has two semilattices; use the join semilattice please*.

Maybe this is too subtle and weird? The names being similar is not great, but I'm not sure what I'd change. I feel like using the same name for both `Semilattice[A] => JoinSemilattice[A]` and `JoinSemilattice[A] => Semilattice[A]` might be confusing, but maybe not?

Definitely open to suggestions here.