This check will break when there are more than 2^16 elements in the collection.

I think we need to start passing the protocol version to serialize/deserialize methods.  When decoding UDTs, we can use ``max(3, protocol_version)`` to decode subfields.

I need to start working on adding 2.1 support in any case, so maybe this is the best place to start.