refactoring the definition of laws, part 3: "Want to have some cake?"

We want to exclude 0 when testing division. This is not as easy as it seems,
since the Multiplicative* classes do not have a member which holds their zero
value. Hence, we have to take care of that specially, by requiring (at least)
an AdditiveMonoid when instantiating the law cake.

This commit splits `AlgebraLaws` into `GroupLaws` and `RingLaws`.