I've been trying to centralize all subscriptions like this in the root editor component. You can look at cursors and selections changing as an example of the approach. I think it works better to have all the model interaction in one place, then gather data to pass down to the child components. It's not completely clear because we do read from the editor model in the lines and gutter components, but we don't subscribe to it there.

A really easy way to express this could be to construct a hash of decorations in the editor component and pass them into the gutter component. Then `shouldComponentUpdate` could easily compare what is passed in to decide if the gutter actually needs to update based on the decorations. Not totally sure about that approach, but it's at least consistent with how I'm handling selections and cursors.