Times package:semirings

Generically generate a Semiring times operation for any type implementing Generic. It is only defined for product types.
gtimes a (gtimes b c) = gtimes (gtimes a b) c
gtimes a gzero = gzero = gtimes gzero a