The stuff I left in `__init__` should be set on creation time, the paths are modified by `iter_errors`, or `descend`, and the rest should be set by `set_details`. The only real exception to this is the `required` keyword from draft 3, and that's because it's being validated from outside `validate_required`. Those were my thoughts at least, I'm fine with switching it though.