GroupAction for Sign and other bits

This does a few things:

  * It adds a `MultiplicativeGroupAction` for `Sign`, so we can write expressions like `sign *> x`,
  * Loosens the scalar member on `GroupAction` to only be a `Semigroup` instead of a `Group`,
  * Adds convenience methods to switch between `Additive/MultiplicativeGroupAction` and `GroupAction`, and
  * Adds `GroupActionLaws` and some property tests using it for `Sign`.