Allow starting the server with both file_to_run and notebook_dir

file_to_run and notebook_dir would collide, with possible dictionary
ordering randomness depending on how they were passed.

With this change, the default value of notebook_dir is pulled from
file_to_run, instead of pushing the value when file_to_run is changed.
This makes it possible to specify both and have the server behave as
expected.
Allow FileContentsManager and MappingKernelManager to be used outside NotebookApp
Remove comparisons in traitlet links
Merge pull request #6989 from SylvainCorlay/safe_link

Remove comparisons in traitlet links and directional links
Merge pull request #6962 from takluyver/nb-dir-and-file-to-run

Allow starting the server with both file_to_run and notebook_dir
handle various permission failures

- turn various EPERM, EACCES errors into 403
- add `writable` bool field to contents models
- if a notebook is not `writable`, save is disabled
s/open_w/atomic_writing/