Switch back to many subtypes for binary messages.

Some protobuf libraries don't support checking if a field exists (they
always return a default value), so although this style has more code it
is easier to support.