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'd switch that up for `Regexp#inspect` rather than `Regexp#source`, you'll get a nicer output. "title must match /\\ASir|Dame\\z/ and Laird doesn't" in this case.