It would be nice to be able to decouple the diagnostics engine. As far as I can tell it's almost always Diag.Report which is used.
Can we have some sort of convenience here?
1. A thread local global (access using macro)
2. A wrapper object (explicitly passed in like the DE object is used today)
3. Pull out the DE and push a copy into C2 that we can handle and update like we want.