This is a redux of Ewan's patch , refactored to properly substitute primitive types using a hook in the itanium demangler, and updated after the previous patch went stale
The new SubsPrimitiveParmItanium function takes a symbol name and replacement primitive type parameter as before but parses it using the FastDemangler, which has been modified to be able to notify clients of parse events (primitive types at this point).
Additionally, we now use a set of ConstStrings instead of a vector so that we try and resolve the same invalid candidate multiple times.
I'd particularly welcome feedback on whether there is a better way of doing the hook from the demangler. In the present implementation, the time tradeoff is a single nullptr check in the hot path, which was the least invasive change of a few I prototyped.