This also requires some traits and structs in an `encode` module (the one in piet-metal/piet-gpu-types works, and was used to test).
Add a layout pass to the struct derive logic.
This version will be similar but somewhat different to what's in piet-metal now. Hopefully a little simpler to use (no distinction between packed and unpacked structs) and better structured.