Highlight state considation

This builds on #1729 and makes our language a lot more consistent. For my sanity.
> We don't use this feature

That's no excuse to break it.

>  and I don't particularly like that the caller is responsible for dispatching an event.

Well, the caller is the only party in the game who knows that it has finished updating a batch of highlights together. The Highlighter engine is only responsible for doing the actual drawing; it *can't* know whether or not more request are going to come in the same row.