Introduce WASM toolchain

This CL adds:
- Build dependencies to NodeJS and emscripten toolchains
- The GN incantation that defines a wasm_lib() target type
  which produces .wasm and .js files from .cc files and
  source sets
- A new is_wasm variable, which works very similarly to
  is_nacl in chrome.

Example usage:
-----
  wasm_lib("target_name") {
    generate_js = true
    sources = ["wasm_bridge.cc"]
     deps = [
      "../../gn:default_deps",
      "../../protos/perfetto/processed_trace:lite",
    ]
  }
-----

Change-Id: Ia00f9aca6b97b1deb9cc2a94b8589155543137d3
diff --git a/gn/standalone/BUILD.gn b/gn/standalone/BUILD.gn
index 902edd2..21866ad 100644
--- a/gn/standalone/BUILD.gn
+++ b/gn/standalone/BUILD.gn
@@ -13,6 +13,7 @@
 # limitations under the License.
 
 import("//gn/standalone/android.gni")
+import("//gn/standalone/wasm.gni")
 import("//gn/standalone/sanitizers/sanitizers.gni")
 
 config("extra_warnings") {
@@ -25,6 +26,7 @@
       "-Weverything",
       "-Wno-c++98-compat-pedantic",
       "-Wno-c++98-compat",
+      "-Wno-disabled-macro-expansion",
       "-Wno-gnu-include-next",
       "-Wno-gnu-statement-expression",
       "-Wno-gnu-zero-variadic-macro-arguments",
@@ -62,11 +64,14 @@
     "-fstack-protector",
     "-fPIC",
     "-g",
-    "-Wa,--noexecstack",
     "-Wformat",
     "-Werror",
   ]
 
+  if (!is_wasm) {
+    cflags += [ "-Wa,--noexecstack" ]
+  }
+
   if (is_clang) {
     cflags += [
       # Color compiler output, see https://github.com/ninja-build/ninja/wiki/FAQ