Copy from druntime available module buth with modifications allowing it's usage in @nogc.
Warning: This is currently used in backtrace printing in which case buffer to demangle into is a slice to static array (1024B). be aware that this @nogc variant is altered in a way, that it just asserts in case of more data is needed. Backtrace printing is handled this way in druntime (as it'll be a problem when demangle'll resize static array slice), so it should be ok for us too. Just be carefull about that.
All modifications to the original are noted in comments with 'CHANGE:'.
See: https://github.com/dlang/druntime/blob/master/src/core/demangle.d Last revision from: d2d49ab4930e1ffd3ece6e5a6ea7767a01d5e077
Demangles D mangled names. If it is not a D mangled name, it returns its argument name.