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.
Change the name of this var to something reasonable like `length`