Simplify generics.

Since `M` can be unambiguously determined via the associated type in `S`, we don’t need parameterize by `M` explicitly.

(I checked this out locally in order to test that it compiled correctly, but all of the protocol conformances had to be removed. Long story short, it *did* compile, but I’m not pushing all of those other changes because everything will be ruined forever.)