__qbwrite() can throw for many reasons, including EPIPE (closed queue),
EAGAIN (full for now), and EINTR (syscall aborted). However, large
qwrites, meaning greater than Maxatomic, get broken into several block
writes. Some could succeed before we catch the error, and we need to
report those successes as a partial write.

To make things a little trickier, __qwrite() is only allowed to throw based
on its qio flags. Other times waserror() might be dangerous, such as in
irq context.

This came up by writing large blocks to a non-blocking pipe. The writer
thought that none of the write made it, so it kept writing the same blocks
over and over. However, each time the first block (at least) was actually
written. The reader received that first block over and over.