You've given a very nice overview of asm.js, but I think the performance comparison is misleading. The output of Emscripten, whether asm.js or not, will not use JavaScript objects, dynamic types, etc., and will do virtually all of its computation on typed arrays. JavaScript written by humans tends to be much, much slower than equivalent native code (closer to 20x) because developers actually use the dynamic features of JavaScript on a regular basis, and spend little if any time manipulating typed arrays.
Minor note: Emscripten is not a Mozilla project. It's just one person hacking away on github. Quite impressive!
Also, I'm thoroughly surprised that there was no discussion of Google's NaCl (native client). Given a program in C or C++ (or any other language with an LLVM front-end) you could easily go either route. Of course NaCl doesn't play nicely with other platforms like asm.js does, but its performance is a lot more compelling than Dart so adoption looks just a bit more likely.