Add validation classes

This reworks how all the `*_node` methods are defined to pull the common patterns of mutation (before/after) and validation out.
I found this really hard to reason what the class was validating from the name, as ISA is a financial thing, and is_a? is the ruby thing. Perhaps rename to something more like TypeChecker or something? I dunno, I suck at naming. :grin: