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.
Merge remote-tracking branch 'origin/master' into topic/lattices
Added Semilattice and BoundedSemilattice.

I also tried to provide some initial documentation for lattices,
but I'm sure the text can be improved. There is some tension between
using mathematical symbols (concise and easy to read IMO) and using
the methods (denser but closer to code).

It would be still be good to link to the relevant Wikipedia articles and
other useful sources as well.
Clean up lattices a bit.

This commit introduces generic semilattices (and bounded semilattices).
It also adds some useful conversions to/from the various lattice types,
as well as conversions to PartialOrder instances.

It also moves some operations from Bool onto Heyting (where they are
just as valid) and provides a method to get a commutative ring from
a heyting algebra.
Fix partial order semantics for join-semilattices.

Previously, I had a confused understanding of how a
join-semilattice should order elements. Oscar set me
straight.

Now, Semilattice has two methods to generate PartialOrder
instances:

 - asMeetPartialOrder
 - asJoinPartialOrder

This means that MeetSemilattice and JoinSemilattice can
each create the correct partial ordering for a given
Lattice.
This commit adds some tables to help explain algebra.

This commit tries to start writing some documentation around
how the algebraic structures work and their relationship to
each other. It is very rough but hopefully moves us in the
right direction.
fix table formatting
continue fixing table formatting
Reorganize sections and add some more exploratory content.

Based on Oscar's comments, hopefully this will be a bit clearer.
Add unicode notation for the top and bottom of bounded lattices.
Fix typo with distributivity law.
Fix more errors spotted by @posco.

I changed the "generic multiplication" operator to make it harder
for people like me to get it mixed up with "generic addition".

I also removed the assumption that idempotence commutes. I'm not
sure it's true: if it is, we can modify it again later.
Add section link
Fix links in README.
adjust links to point to the master branch
Merge pull request #16 from non/topic/basic-property-tables

Topic/basic property tables
Merge pull request #9 from non/topic/lattices

Add support for lattices.
Merge remote-tracking branch 'origin/master' into topic/std-and-laws
Move new lattice type classes into core.
Update laws and std instances with lattices.

This commit adds some new laws:

 * LatticeLaws: laws for the lattice family (semilattices &c)
 * LatticePartialOrderLaws: partial orders + semilattices consinstency

It also upgrades algebra.std.bool to Bool[Boolean] with Order[Boolean].

Finally, it tests the new laws with Boolean.