Support streaming file transfers

This commit modifies the `DiskFileSystem` interface to support streaming file transfers, and implements streaming transfers as the default (see #12). Interface changes are as follows:

* DiskFileSystem#write now takes an `IO` object instead of a `String`.
* DiskFileSystem#read expects to receive a block and yields an `IO` object to the block.