core: build initramfs using generic initramfs rule

This chips away at three different things:
 - it brings us closer to hermetic and cross-platform builds by not
   depending on genrule/shell and lz4-the-tool
 - it generalizes initramfs building (allowing for more than one to be
   built, if necessary)
 - sets the stage to use Bazel transitions [1] to force all included Go
   binaries to be built in pure/static mode while allowing host Go
   binaries to use cgo/dynamic linking if necessary, and hopefully also
   allowing us to get rid of some BUILD patches that set pure='on' in
   go_binary calls (notably needed in Cilium and some existing
   third_party dependencies).

[1] - https://docs.bazel.build/versions/master/skylark/config.html#user-defined-transitions

Test Plan: build machinery change, covered by existing tests

X-Origin-Diff: phab/D554
GitOrigin-RevId: a5561eb5ca16e6529b9a4a2b98352f579c424222
diff --git a/third_party/lz4/BUILD b/third_party/lz4/BUILD
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/third_party/lz4/BUILD
diff --git a/third_party/lz4/build.patch b/third_party/lz4/build.patch
new file mode 100644
index 0000000..0415c87
--- /dev/null
+++ b/third_party/lz4/build.patch
@@ -0,0 +1,69 @@
+Copyright 2020 The Monogon Project Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+diff -urN com_github_lz4_lz4.orig/lib/BUILD com_github_lz4_lz4/lib/BUILD
+--- com_github_lz4_lz4.orig/lib/BUILD	1970-01-01 01:00:00.000000000 +0100
++++ com_github_lz4_lz4/lib/BUILD	2020-06-05 22:00:01.056028668 +0200
+@@ -0,0 +1,19 @@
++cc_library(
++    name = "lib",
++    srcs = [
++        "lz4frame.c",
++        "lz4.c",
++        "lz4hc.c",
++        "xxhash.c",
++    ],
++    hdrs = [
++        # Yes, this is also a header. lib/lz4hc.c includes it.
++        "lz4.c",
++        "lz4.h",
++        "lz4frame.h",
++        "lz4hc.h",
++        "xxhash.h",
++    ],
++    strip_include_prefix = "//lib",
++    visibility = ["//visibility:public"],
++)
+diff -urN com_github_lz4_lz4.orig/programs/BUILD com_github_lz4_lz4/programs/BUILD
+--- com_github_lz4_lz4.orig/programs/BUILD	1970-01-01 01:00:00.000000000 +0100
++++ com_github_lz4_lz4/programs/BUILD	2020-06-05 21:59:06.233821791 +0200
+@@ -0,0 +1,22 @@
++cc_binary(
++    name = "lz4",
++    srcs = [
++        "lz4cli.c",
++
++        "lz4io.h",
++        "lz4io.c",
++
++        "bench.h",
++        "bench.c",
++
++        "datagen.h",
++        "datagen.c",
++
++        "platform.h",
++        "util.h",
++    ],
++    deps = [
++        "//lib",
++    ],
++    visibility = ["//visibility:public"],
++)
+diff -urN com_github_lz4_lz4.orig/WORKSPACE com_github_lz4_lz4/WORKSPACE
+--- com_github_lz4_lz4.orig/WORKSPACE	1970-01-01 01:00:00.000000000 +0100
++++ com_github_lz4_lz4/WORKSPACE	2020-06-05 21:50:45.128930780 +0200
+@@ -0,0 +1 @@
++workspace(name = "com_github_lz4_lz4")