fix use of == in EuclideanRing[A]
Add constructors for Additive and Multiplicative instances.

Currently, you can go from additive/multiplicative instances to generic
instances using the eponymous methods. For instance:

    def abc[A: Ring]: Monoid[A] = Ring[A].additive
    def xyz[A: Ring]: Monoid[A] = Ring[A].multiplicative

There was no easy way to go the other direction however. This commit
adds Additive and Multiplicative companion objects:

    def cba[A: Semigroup] = AdditiveSemigroup(Semigroup[A])
    def zyx[A: Semigroup] = MultiplicativeSemigroup(Semigroup[A])