General attributes/*.rb refactor

Mostly extractions to local variables or minor unnesting.
Derive PropertiesV4 from Properties
LimitAttribute: min/max{Items,Props,Length,...}

The code in `limit.rb` is a bit insane and over-abstract now, but I'm
trying to keep the same classes in place for now so that I don't
simultaneously have to rewrite a ton of Schema::Draft1, ::Draft2 etc.
Simplify common inner-schema pattern