First problem, maybe due to embedding, the library does not correctly see that
`BaseVariant` implements the `struc.Custom` (https://github.com/lunixbochs/struc/blob/master/struc.go#L54).
Even when implementing directly on the type (`system.Instruction`), the library does not
see it anyway.
But even if that would work, I don't think it will possible to make it work. The library
pre-allocate an array using the `Size` instruction. In your case, without serializing,
we don't know in advance without actually packing what will be the final packing size.
I'm my opinion that we should go back to our custom encoding/decoding code that we had
in eos-go, probably even extracting it (the base work) and re-use it.