well, it could still do that. it would _return_ 'problems' and let the caller figure out what to do (raise, or not).
we don't need to raise in `valid?` at all, but it's a side-effect of the implementation. we only want to raise in `#initialize`, so we may as well just check 'problems' there.