ParentNode inherits from NodeImpl and adds the capability of having child nodes.
Not every node in the DOM can have children, so only nodes that can should inherit from this class and pay the price for it.
While we have a direct reference to the first child, the last child is stored as the previous sibling of the first child. First child nodes are marked as being so, and getNextSibling hides this fact.