Make the spec XML struct fields private.
Restore spec XML struct field visiblity for the xml package. Refactor typedef processing.
Initial incomplete refactoring to support extensions.

Remaining work:
- Support non-required groups in the template
- Support duplicate requirements across extensions and core
Refactor the extension implementation.
Include extension initialisation in the package.
Strip the API prefix from extension names.
Clean up and add documentation for reserved word utilities.
Fix glx prefix stripping.
Update the TODO.