Introduce an Emscripten C++ ABI.

Emscripten uses the Itanium C++ ABI for most things, except that it uses
ARM C++ ABI pointers to member functions, to avoid the overhead of aligning
functions.
Don't align member functions.

Emscripten uses the ARM ABI for pointers to member functions and doesn't
require that member functions are aligned.
1.17.0
Merge branch 'incoming'