Re-introduce the protobuf serializer

The serializer was removed under the assumption that it was largely
handling coercion, which was unecessary because Protobuf handled that
already. This turned out to only be partially true. It was also ensuring
that repeated values were wrapped in an array.

Re-introduce the protobuf serializer, but this time simply handle
wrapping any repeated fields in arrays (if they aren't already).