Improve nbformat json validator

This pull request fixes some of the issues in #2786:

* Add a clean function for validating notebooks that returns True|False.
* Iterate on the spec so that our current notebooks pass the validation test.

The biggest change is moving `IPython/nbformat/v3/validator.py` to `IPython/nbformat/validator.py` and adding some code to figure out the correct schema file depending on the notebook format. 

I also had to change a few parts of the json schema to make the example notebooks pass validation: changing "source" and "input" to be either strings or arrays, and making the cell prompt optional. These things should probably be addressed in v4.