Separate protocol handling for STRING/BINARY types

Some protocols (e.g. TJSONProtocol) use different encodings for string
and binary data, so treating them as the same type is incorrect.
Add missing @Test annotation to test class
Call TProtocol.readFieldEnd after reading fields

Some protocols (e.g. TJSONProtocol) depend on readFieldEnd being called
to function correctly, but we were only calling it when skipping fields,
not when reading them normally.
Test TJSONProtocol with swift codecs

TJSONProtocol requires stricter adherence to the rules of TProtocol
usage, and some of these rules were broken until recent checkins, but it
was going unnoticed because we only tested TCompactProtocol. Now that
the TProtocol usage is fixed, we can add tests for TJSONProtocol to
check for regressions.
Add UTF8 encode/decode roundtrip tests