Extending the Format String Language

Adds choice blocks and struct arrays into the format string language.
There is test coverage on `format_sizeof`'s changes and the new `get_packet_sub_fmt`, but not on the new features of `free_packet`, `decode_packet`, or `format_packet`, which require new union definitions in order to be meaningful and some creativity to test.

All old functionality of the modified methods is preserved.
That sounds pretty dangerous. I would prefer NULL (error?) rather than defaulting to returning the entire string.