fix issue with parsing non-binary-encoded IO streams

If a non-binary string is passed in, Message#parse wraps it in a
StringIO and sets the encoding to binary. But if a IO object is passed
in, #parse uses it as-is, and was potentially reading multi-byte chars
instead of raw bytes because of the getc usage.

fixes #6