Outputs are more consistent and can use existing streams.

The writing step in all readers can use a filename or stream. This will
be useful for testing, where we can pass in a StringIO instead of a
filename.

The variable for this filename-or-stream is now called "output_file"
consistently.

We distinguish a StringIO from a filename using duck typing, so that it
works across Python 2 and 3 (and could generalize to other writable
things).