Use an "outer" SortAndNormalize step. Be less dependent on Layer
Remove Layer and ensure there's only a single Sort/Normalize step.

This can do anything the previous impl did (since our only Layers were
for types that had Traverse instances), but means not every type in the
stack needs to be a Monad (only types where we actually call join)
Enable using Distributive as an alternative to Traverse