NodeElement.setTag stops being a magic method that tries to simulate
tagName as being a mutable property. It's now just a shortcut for
replaceWith combined with copying replaced element contents, attributes
and custom data. This change:
- allows for removal of a separate nodeTagChange event,
- simplifies implementation,
- makes api more in line with DOM specification,
- invalidates references to the old node explicitly by returning
reference to a newly created node.