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)
The Sphinx [samp role](http://sphinx-doc.org/markup/inline.html#role-samp) is useful for this kind of thing. If you put:

```rst
:samp:`ipython nbconvert --to python {notebook}`
```

Then it will render with the word notebook italicised, which gives the user a nicer clue that they're not supposed to literally type '[notebook]'.