WebAssembly is quite a small change from asm.js - it's mainly a different transfer format and a parsing speedup. It's targeted towards non-GC languages like C/C++ and Rust - for managed languages, Javascript is the only sane compile target.
It is not a walk in the park to compile runtime into WebAssembly (unless you are just compiling an interpreter).
Performant runtimes usually include machine specific backends and/or hand written assembly code. You'll need to port that all to target WASM too.