New validator

This still needs some comments and tests but the basic structure is there. Tear it up.
Oh, could we not warn about - vs _? sure _ is preferred now but the difference is only meaningful for writing consistent documentation. Users shouldn't be bothered with it, particularly since the two were not previously interchangeable. Maybe a extra --pedantic flag could be used for that level of validation?