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.
is it a law that:

```scala
val ord1 = lattice.asMeetPartialOrder
val ord2 = lattice.asJoinPartialOrder
ord1.compare(a, b) == Double.NaN /* I guess you know this boxes by the way, or used to */ ||
  ord2.compare(a, b) == Double.NaN ||
  ord1.compare(a, b) == ord2.compare(a, b)
```