Add validation classes

This reworks how all the `*_node` methods are defined to pull the common patterns of mutation (before/after) and validation out.
This might _not_ be an issue, but `Regexp#source` doesn't expose the flags used in the regexp. I'm struggling to think of an example though, so perhaps it's not an issue.

`/something here/x` perhaps? Won't match "something here" although unless the flag is shown it looks like it should do.

```ruby
r = /something here/x
"something here" =~ r # => nil
r.source # => "something here"
```