nbformat validation

backport some nbformat cleanup from #6045, mainly to do with validation

- use Draft 4 JSON schema for validation
- deprecate unused `format` arg in `nbformat.current.read/write`
- support downgrading notebooks with nbconvert
- inform users of invalid notebooks
- fix various inconsistencies in v3 Python API, which didn't create valid notebook elements