[GHC] #14853: Implement the "Semigroup and Monoid instances in Data.Functor.Product and friends" proposal