Based on #526, but updated for the new interfaces in StaticFileHandler.
Unlike #526, this change does not actually wait for each chunk to be
flushed before reading the next one. Flushing raises some additional
complications (wsgi compatibility, chunked encoding vs content-length)
that are probably not worthwhile for the intended use of StaticFileHandler.
Reading in chunks has benefits even if we don't wait for the flush
(i.e. memory fragmentation), and this change establishes the necessary
subclass interfaces so we can add flushing in the future.