Improve GNU C++ name mangling
Improve GNU C++ name mangling

This makes it so the symbol is not assumed to be a constructor when it
includes new unless it's the last part of the symbol and infers whether
or not the symbol is a constructor by checking if the last two parts of
it are identical.

This also mangles Str, Pointer, and CArray attributes with the rw or
cpp-const traits properly.

Closes #2884.

rakudo/rakudo,tony-o/rakudo,tbrowder/rakudo,tbrowder/rakudo,MasterDuke17/rakudo,tony-o/rakudo,salortiz/rakudo,MasterDuke17/rakudo,softmoth/rakudo,salortiz/rakudo,tony-o/rakudo,MasterDuke17/rakudo,rakudo/rakudo,rakudo/rakudo,tbrowder/rakudo,salortiz/rakudo,MasterDuke17/rakudo,softmoth/rakudo,nbrown/rakudo,labster/rakudo,softmoth/rakudo,tony-o/rakudo,MasterDuke17/rakudo,nbrown/rakudo,rakudo/rakudo,nbrown/rakudo,tony-o/rakudo,tbrowder/rakudo,nbrown/rakudo,salortiz/rakudo,tbrowder/rakudo,labster/rakudo,nbrown/rakudo,salortiz/rakudo,labster/rakudo,tbrowder/rakudo,MasterDuke17/rakudo,tony-o/rakudo,labster/rakudo,rakudo/rakudo,labster/rakudo,nbrown/rakudo,softmoth/rakudo,softmoth/rakudo,salortiz/rakudo,rakudo/rakudo,labster/rakudo