cssnode: Redo first/last-child change tracking
Invisible nodes don't change the first/last-child status of the nodes after/before them. That means we don't have to just check the state of the adjacent node when modifying this state, but all their siblings until we hit a visible node. The same way, a node is not the first child if it has no previous sibling, it is the first child if it has no previous visible sibling. This is important for caching in the global lookup cache.
Showing with 62 additions and 10 deletions