The most likely path forward would bring in:
class Semigroup a where
(<>) :: a -> a -> a
(... and sconcat :: NonEmpty a -> a probably hidden in a submodule to avoid bringing NonEmpty into Prelude, and times1p possibly bikeshedded to stimes1p for naming consistency, both probably exiled to Data.Semigroup)
class Semigroup a => Monoid a where
mappend :: a -> a -> a
mappend = (<>)
mempty :: a
with a path towards eventually removing mappend from Monoid in 7.18+, which would get you more or less to your ObBikeshed in the long run, minus a couple of things, plus a couple of others.
(and possibly a top level mtimes can then be defined in terms of stimes1p and mempty, giving peasant exponentiation for log time construction of many monoids and O(1) for idempotent ones.)
As an aside: having a concat that is parameterized on Foldable on the other hand as a member of the class actually turns out to almost paradoxically prevent you from doing almost any optimizations for it. (I say almost, since because we added some members to Foldable in 7.10 this isn't quite the case any more.) Also to fold you need at least one member, so Foldable/[] is too weak.
-Edward