Use open() and read() so we can check EIO.

Right now short reads from e.g., pipes, are treated as EOF and there are no
retries.  With better retries this could be used as a filter for socket
transfers.  A buffer layer could be used (i.e., blah | buffer | vdmfec -d).
However, there are already much better libraries and apps available for that
(FEC was originally developed for network packet recovery).

Handle out of order and missing blocks?
