Add a cleaner intermediate representation

Reviewer: @andi-bigswitch

This is based on the pyloxi intermediate representation. A later pull request will flip pyloxi over to the new version.

The main features of this representation are being version-specific and distinguishing between various types of class members (type, length, data, pad). A higher-level unified representation that the C backend would use could be built on top of this.

Knowledge of type and padding members is pushed to the input files using new syntax.

Not yet implemented is any abstraction over the C-like member types.

No significant change to generated code (except for removing the of_oxm_experimenter_header class).

The old type_maps data is now generated from the input files for use by backends that haven't been converted to the new IR yet.