Used for emitting structured error messages and other diagnostic information.
This is a large type, and often used as a return value, especially within
PResult type. In theory, return value optimization
(RVO) should avoid unnecessary copying. In practice, it does not (at the
time of writing). The split between
DiagnosticBuilderInner exists to avoid many