use jsonschema refs, no need for jsonpointer
Use Draft4 JSON Schema for both v3 and v4

no longer need jsonpointer
fix some validation bugs in v3

Python API had many inconsistencies with the actual spec
raise better ValidationError in validate

when oneOf would fail on a cell or output with an unhelpful error,
validate again against the target spec,
based on the output or cell type.
add `nbformat.writes(version=X)` for downgrade

allows easy downgrade of notebooks.
support downgrading notebooks with nbconvert

Use:

    ipython nbconvert --to notebook --nbformat 3 notebook.ipynb

to write `notebook.v3.ipynb`

Adds `output_suffix` resource, inserted before file ext.
Suffix is used if `--output` is not specified.

Default is `.nbconvert`, to prevent `--to notebook` from clobbering existing notebooks by default.
add assert_big_text_equal

for better output when large strings differ
add dialogs for failed save/load

- failed validation doesn't prevent save/load,
  but the user is now warned about it.
- there is now a warning dialog if fromJSON fails,
  rather than the usual silent failure.
assume valid if there's no schema (v2)
skip additionalProperties validation on notebooks from the future

adding new keys is considered backward-compatible change,
so these additional keys should be ignored.
define nbformat, nbformat_minor in v2
deprecate format arg in reads/writes

warn on any attempt to read or write .py notebook files
scrub bytes when upgrading notebooks from v2

v2 stores png/jpeg as b64 ascii bytes
trust is stored in code_cell.metadata

not top-level code_cell
codecell.collapsed is not a required property
don't write or read transient values to disk

- orig_nbformat
- orig_nbformat_minor
- cell.metadata.trusted
fill missing metadata when upgrading v2->v3
don't check_and_sign old notebooks on upload
don't convert notebooks on upload
cast writes to unicode before write