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)
If the `or` here is for Python 2 and 3 compatibility, I think a neater way is to check `r.content[:1]`, which will be bytes in both versions.