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...
I think `#include <string>` needs to be included unconditionally because `demangle()` returns an `std::string` on all platforms.