Add toy example building Rust and C++ interop code

This uses https://cxx.rs/, which seemed to be the best candidate
in terms of giving us control over how the bindings work and as
far as overall adoption. Those docs are decent, but this CL took
a fair bit of experimentation and exploration.

We also had to fix a few things about our C++ toolchain, as the
Rust toolchain uses a normal C++ linker (i.e. lld) to link a final
executable.

We wanted to be able to build Rust using both GN and Bazel, but
setting up the former was anticipated to be a fair bit of work,
especially rolling out a hermetic toolchain. Thus, we decided to
use some pre-made Bazel rust toolchains and have GN shell out to
Bazel when building Rust; that worked very well. The documentation
for the build in Rust rules is https://bazelbuild.github.io/rules_rust/

I tested this on Linux and Mac (we don't yet have Windows C++
support). The cool part is that users don't have to manually
install rust or cargo - Bazel downloads these hermetically.

Suggested Review order:
 - experimental/rust_cxx/hello-world.rs for a simple pure-rust
   executable requiring no external deps. See also
   experimental/rust_cxx/BUILD.bazel
 - gn/bazel_build.py and BUILD.gn for how GN shells out to Bazel.
 - WORKSPACE.bazel to see how the rust toolchain is downloaded
   and the two main Rust crates we need (cxx and cxxbuild_cmd).
   There are some helper functions (cxxbridge_cmd_deps() and
   cxx_deps()) to get the transitive dependencies.
 - bazel/external/cxx/* and bazel/external/cxxbridge_cmd/* have
   the custom BUILD.bazel files we need to expose the target
   for generating the bridge code as well as the rust library
   which supplies the rust standard library and other things.
   The Cargo.lock files were generated and can be skimmed/ignored.
 - experimental/rust_cxx/hype-bridge.rs and
   experimental/rust_cxx/main.cpp to see how C++ calls Rust
   (which I think is the primary use case Skia expects of those
   third_party Rust libraries). Look back to
   experimental/rust_cxx/BUILD.bazel and note that the
   rust_static_library part is REALLY important or rust will not
   include things like __alloc in the output .a file, which makes
   the linker sad.
 - toolchain/* for misc fixes to our C++ toolchain. Importantly,
   the lld_trampoline.sh scripts have been removed as they were
   unused and misleading to have (Bazel always seems to assume
   it is talking to Clang when linking).

Change-Id: If8682645ce3cc090aacefc42b67c3b8689d0248a
Bug: skia:14201
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/664576
Reviewed-by: Arman Uguray <armansito@google.com>
Commit-Queue: Kevin Lubick <kjlubick@google.com>
21 files changed