NewReader returns a Reader for r.
If r already implements both io.ByteReader and io.Reader, NewReader returns r.
Otherwise, r is wrapped to add the missing interfaces.
NewWriter returns a Writer for w.
If r already implements both io.ByteWriter and io.Writer, NewWriter returns w.
Otherwise, w is wrapped to add the missing interfaces.