Port to Boost.Core demangle()

The change does several things:

- Makes use of the common demangle() implementation in Boost.Core.
- Fixes a memory leak if std::string constructor throws.
- Removes the dependency on Boost.Algorithm.
- Makes the behavior consistent for platforms with and without __cxa_demangle().
Worked around C4127 warning with MSVC.
Removed unused demangle() function.
Added a pseudo-test for typename formatting.

The test doesn't verify correctness of the output because the formatting result is platform-dependent. The test succeeds if the formatting code compiles and doesn't crash in typical use cases. The output correctness can be checked manually.
Merge pull request #2 from Lastique/patch-1

Port to Boost.Core demangle().
Thanks for the patch and the good discussion.