Make read_file_async more like write_file_async and read_file

read_file_async doesn't return an error code anymore. All reporting is
done with the async_file_read callback, just like write_file_async does.

If there is nothing to read then report zero bytes and stop the async
read operation, just like read_file does.