Simplify Read ops. Also fix incorrect completion count.
Simplify Read ops. Also fix incorrect completion count.

re: the fix, the previous behavior defined surfaces + 1 number of
completions needed, but this is obviously incorrect because there's both
tags and frames in addition to the surfaces.

So, rather than fiddle with a specific number of completions, just read
all surfaces in a loop and then assign the tags and frames elsewhere.
Might result in the tag and frame reader goroutines blocking for longer
while trying to send their results, but it's not a concern.

nilium/go-md3