only validate package_data when it might be used

closes #5046
run check_package_data as part of build_py

rather than explicitly in setup.py
require print_method to be a bound method

closes #4990
add _valid_formatter

for determining whether a method is valid

should properly reject unbound methods of both compiled and Python classes, and allow any other Python callable.
don't allow LazyConfigValue on private names

avoids populating Config objects with `_repr_foo_`, etc.
add regex support to AssertPrints
add IPython.html.nbextensions.install_nbextension

for installing files into IPYTHONDIR/nbextensions
add `ipython install-nbextension` entrypoint
add install_nbextension at top-level IPython.html
support URLs and zip/tarballs in install_extension
typo
rewrite _valid_formatter

- explicitly forbid method_descriptor
- explicitly allow builtin_function
- use inspect.getcallargs for any other callable
allow installing nbextensions with symlinks
add check_nbextension
add IPython.load_extensions in js
NotebookManager API: rename *notebook_model methods to *notebook
Add method notebook_exists to NotebookManager.

It is called by IPython.html.notebook.NotebookHandler.get,
so it must be implemented by every notebook handler.
Move method increment_filename from FileNotebookManager to NotebookManager

The implementation requires only a minor change (call notebook_exists
rather than checking for file existence) to be universally usable
in other notebook managers.
Rearrange the NotebookManager methods for clarity

Methods are organized into three categories:
 - Methods that must be implemented in subclasses
 - Methods that have default implementations, but can
   be overridden if required.
 - Support methods meant to be called by methods in subclasses
minor notebook logging changes

log refer only on 4XX, and never log user agent

This function was ported from nbviewer, and some of the choices were not quite right for the notebook server.