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.
might use

```python
try:
    return self.parent.notebook_dir
except AttributeError:
    return getcwd()
```

to avoid assuming that parent is a NotebookApp.