Use gcc/clang demangler for NiceTypeName.

@sherm1 , as a follow-up to our name mangling conversation, I found a way to demangle right in NiceTypeName.

See https://gcc.gnu.org/onlinedocs/libstdc++/manual/ext_demangling.html, https://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.3/a01696.html

I don't assume you want to accept this PR. I don't know how portable this is, but I think GCC and Clang support it (idk which versions). I tested it on my computer and it worked (I actually tested it with OpenSim).

If you like this, I can write a test if you'd like. Also, There is still an issue: this leaks memory (`__cxa_demangle` allocates memory; see the last sentence of the first link above). I'm not sure how to prevent that...
The documentation defines status==0 as `0: The demangling operation succeeded.` and then says `Returns: ... NULL if the demangling fails.` I interpret those two things together as meaning that anything but 0 means "demangling failed". But since it promises to return NULL on failure, we can avoid the ambiguity altogether with `if (ret) std::free(ret);`