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 don't see your point. Is it the case that Lattice would have two orderings that are the same? It seems to me it is possible one would be defined for some pairs, and the other for other pairs. Who said that meet(x, y) == (x | y) exactly as often as join(x, y) == (x | y)?