The assault on the STL is going as poorly as I feared.
It's all right. I've been down this road before.

The type_traits header parses perfectly. Basics like cmath parse perfectly.
The <string> header has never had more errors.
The character_traits and numeric_traits headers are to be the focus of my attention next.
To-do: Treat template instantiations with dependent types as hypotheitcals: construct an `AST` and `definition_hypothetical` to be returned from `definition_template::instantiate`.
Reorganizes headers. Refactors handle_hypothetical.
There are now specific forward declaration headers for AST.h and definition.h. This was to avoid a huge, cyclical dependency graph; it's now much more tree-like.
Moved arg_key to its own header. Now AST can use it.
Refactored handle_hypothetical. Now I can pass arbitrary ASTs to it.
Declared an AST constructor taking a definition_template* and an arg_key.
Put 2, 2, 2, and 2 together, and you get 6½: I'm fixing the issue with dependent template instantitaiton with definition_hypothetical.