add contents webservice

This mainly renames the 'notebooks' service to 'contents' and teaches it about regular files. There is no longer special treatment of directories, just different forms for `content`. Tree view now shows all files.

As usual, modeled on GitHub [contents API](https://developer.github.com/v3/repos/contents/).

I will enumerate the changes to the models and API, but the gist:

- all contents models have name, path, dates, type
- type is one of: directory, file, notebook
- if content is requested:
  - additional `format` key will be `json`, `text`, or `base64`, describing `content`
  - `content` will be
    - list of JSON models for directory contents
    - notebook JSON for notebooks (format=json)
    - file text for text files (format=text)
    - b64-encoded data for binary files (format=base64)
We should clarify that update is different from save in that update is designed to be used for incremental changes to the model without sending the entire thing (through HTTP PATCH). Right now that only works for the filename and path, but in the future, we could implement the PATCHing of other model attributes. That is not clear from the docstrings in manager.py and filemanager.py.