We weren't correctly recovering when a void element is written as a start-end pair. This change cleans up some of the plumbing around end-tag handling and adds recognition for this case. Added a new bespoke diagnostic for the void element case.