Add method notebook_exists to NotebookManager.

It is called by IPython.html.notebook.NotebookHandler.get,
so it must be implemented by any notebook handler.
Remove method NotebookManager._notebookdir_changed, which is
not called anywhere.
Reorganize NotebookManager for more clarity

- Methods are grouped into two categories: those that subclasses
  must implement, and those for which functional default implementations
  are provided.

- Provide a default implementation of increment_filename based on
  notebook_exists. This moves increment_filename to the second
  category
Remove FileNotebookManager.increment_filename, because the
default implementation in NotebookManager is sufficient.