[Enhancement] Enhance protobuf handling
The bare-bones API that protodec provides gets a bit messy when dealing with larger protobufs like what's needed for UMP and SABR. Adding support for proto files to (de)serialize Crystal objects should help reduce the complexity.
We can either update the protodec library to do so or switch to https://github.com/jeromegn/protobuf.cr. Though I don't think the latter supports decoding arbitrary protobufs that doesn't have an associated object definition however...
So maybe in the end we still need something that can gracefully handle arbitrary protobuf messages and ones that doesn't exactly match the defined definitions.
I would also like to add that protodec also doesn't support repeated: https://github.com/LuanRT/YouTube.js/blob/c16feee06533b236f006af86440a76d6a23d13f9/protos/misc/params.proto#L229-L231 but protobuf.cr would. (this would be used to switch https://github.com/iv-org/invidious/blob/df8839d1f018644afecb15e144f228d811708f8f/src/invidious/routes/playlists.cr#L466 to InnerTube)