move collection decorator wrapping to its own class

There’s no functional change here; I just think it’s easier to
understand this way.