always use BINARY encoding of strings internally

I was observing issues when using UTF-8 strings as inputs where
messages wouldn't roundtrip correctly from Message.decode(msg.encode.to_s). These
changes ensures all strings are dealt with using BINARY encoding which
solves my problems.

I will admit to  not being fully aware of what the protobuf standard says about encodings and how to treat strings. As time permits I'll try to look at how the reference implementations deal with encodings.

All tests still pass.