API: formalize the pandas IO API
https://github.com/pandas-dev/pandas/pull/15838#discussion_r109296615

we have fairly uniform IO routines of the form

``.to_format(path, df, **kwargs)`` (takes DataFrame)
and 
``pd.read_format(path, **kwargs)`` (returns DataFrame)

so should document various aspects of this:

- contract on input path strings
- file-like objects  & ``is_file_like`` (https://github.com/pandas-dev/pandas/pull/15894)
- do we do any encoding / compression (only on csv/json ATM), compression
- various guarantees on what we are sending in (e.g. no Index, string columns which are non-duplicated), no non-string objects (see feather/parquet impl).
- make these more pluggable
- perhaps allow a specification for block access / chunking.
- additional args to accept/use: ``mode`` (for writing)