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 guess I too "join order" to mean "reversed" order. Do you think it's worth providing both meet/join partial orders if they are ultimately "the same"? Since lattices will have both I figured you should be able to get greatest-first (join) or least-first (meet, the "normal" one)