Use ContentsManager to serve files and notebooks

In reference to #6613 I'm adding this PR. Rather than working on paths, it will use the current ContentsManager to get the contents of a file.

This includes the suggestions made by @Carreau and @minrk in #6620:

- set correct content-type when serving file
- use `os.path` instead of string operations.
- don't change `AuthenticatedFileHandler`, but add new class `FilesHandler ` in `html/files/handlers.py`
- check if files are hidden (if they are real files)
- use extra branch

I tested this with the default FileContentsManager and the [MongoContentsManager](https://github.com/manuelRiel/mongo_notebook_manager/tree/ipython3) developed for iPython 2 by @laurenceputra and adapted to iPython 3 by myself (still in testing).

(new pull request on extra branch, closing #6620)
I expect this will be wrong for binary files and notebooks. Check the `format` value, which will be `json` for notebooks and `base64` for binary files. You will need to base64-decode binary files and JSON-encode notebooks before writing their data.