Reads a “bytes wire packet” from the underlying reader.
The format is the same as in crate::wire::bytes::read_bytes,
however this structure provides a AsyncRead interface,
allowing to not having to pass around the entire payload in memory.
Split the user_len into body_len and tail_len, which are respectively
the non-terminal 8-byte blocks, and the ≤8 bytes of user data contained in
the trailer block.
Make a limited version of buf, consisting only of up to n bytes of the unfilled section, and call f with it.
After f returns, we propagate the filled cursor advancement back to buf.