This commit updates Semiring to require commutative +.

It also improves the documentation a bit to make it clear
what is going on. It is a result of the discussion taking
place at #20.