structs: Migrate from namedtuple to dataclass

This lets us do some typing for the attributes, and specify the default
values in a much more user-friendly way.

This can be done now since we’re on Python 3.7!
2 jobs for typing in 28 seconds (queued for 3 seconds)
latest
Status Name Job ID Coverage
  Test
passed run-test #16914

00:00:23

 
  Build
passed run-build #16915

00:00:04