Add validation classes

This reworks how all the `*_node` methods are defined to pull the common patterns of mutation (before/after) and validation out.
Personally I wouldn't bother creating named constants for these, just do it in the subject block below:

```ruby
subject do
  XmlSection.build do |builder|
    builder.integer_node :day_of_the_week, range: 1..7
  end.new
end
```