[demangler] Use an AST to represent demangled names

The demangler now demangles by producing an AST, then traverses that
AST to produce a demangled name. This is done for performance reasons,
now the demangler doesn't manuiplate std::strings, which hurt
performance and caused string operations to be inlined into the
parser, leading to large code size and stack usage.

Differential revision: https://reviews.llvm.org/D35159

git-svn-id: https://llvm.org/svn/llvm-project/libcxxabi/trunk@309340 91177308-0d34-0410-b5e6-96231b3b80d8
2 files changed