Fix caching of gutter's previous decorations

If some operation (folding?) changes the screen rows and the decorations at the same time, the previous decorations can no longer be diffed against the decorations to-be-rendered to figure out what to classes to add/remove.

So rather than index by screenRow, this indexes by `lineNumberId`.

@nathansobo check it out
Why would lineDecorations be null? Also, `?`.