Work with buffers directly instead of converting to strings

Encoding and decoding as utf8 strings is troublesome when streaming binary data (where resulting multibyte strings may be split).  This avoids corrupting binary data contained within zip archives.