Added Semiring and Rng to spire.algebra hierarchy.

This commit further subdivides Ring functionality. At this point, we
have the following:

  Semiring: (+) (*) with distributivity
  Rig: Semiring with 0 and 1
  Rng: Semiring with 0 and additive inverse (-)
  Ring: Semiring with 0, 1, and (-)

Another way of putting this is:

  Semiring: additive semigroup + multiplicative semigroup
  Rig: additive monoid + multiplicative monoid
  Rng: additive abelian group + multiplicative semigroup
  Ring: additive abelian group + multiplicative monoid

There are currently no types requiring Rng or Semiring in Spire.
However, it would be difficult for users to add these type classes
later (due to ambiguity) so we are adding them anyway.

Finally, the commit attempts to add more detailed descriptions of the
type classes to the README.