Refactor ...FileDataStream#read_from_stream

The read_from stream method was considered quite dense and hard to quickly
understand during a code review.

This change:
* refactors read_from_stream
* renames bytes_requested to num_bytes
* puts num_bytes checking at the external interface
* uses .zero? rather than == 0