Make nbformat.(read|write) accept file-like object or path

Requested by @fperez .

```python
with open('/path/to/some.ipynb') as f:
   nbformat.read(f, as_version=4)

# Can now be written:
nbformat.read('/path/to/some.ipynb', as_version=4)
```

And likewise for `write()`.

This shouldn't break anything, it just adds the ability to pass a path as a string.