readAll reimplemented io.ReadAll and swallowed every error but fs.ErrInvalid,
returning the bytes it had managed to read with a nil error, so a half-written
index.html was indistinguishable from a whole one. io.ReadAll surfaces the
directory-handle case fs.ErrInvalid covered as well.