bootstrap:cprinter: print_deffun_dynwrapper: wrapper to store in dyntable

To support emscripten, we cannot cast function pointers to a different
type.

We were doing that when setting the elements of the dyntable: the cast
was meant to address the difference in the type of the self argument
on methods.

However, the cast was also bogus when the intf proto and the
implementation differed in return through reference. The wrapper
addresses this when necessary.

Removing the cast also uncovered multiple cases where members were not
correctly identified as not being dyn compatible, and were incorrectly
added to dyntable. (These members would not actually get called.)

Other bugs were discovered in lib/, hidden by the cast, that ncc0
doesn't detect because it doesn't validate that prototypes in the
implementation match the intf (in step_check_exhaustive_intf_impl()).
bootstrap/ncc0: support for emcc; env NCC_COMPILER to select compiler

Like for clang, support is not perfect (clang generates a couple of annoying
warnings, repeated many times, on the code emitted by cprinter).

But several tests have been checked to pass. trun doesn't have support
for emcc yet (it's mostly a matter of getting rid of the clang warnings,
actually).