Add validation classes

This reworks how all the `*_node` methods are defined to pull the common patterns of mutation (before/after) and validation out.
You have to, otherwise it can't demodularize itself to get the name for the XML node.