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/build/savestdout/BUILD.bazel b/build/savestdout/BUILD.bazel
new file mode 100644
index 0000000..7208c6d
--- /dev/null
+++ b/build/savestdout/BUILD.bazel
@@ -0,0 +1,14 @@
+load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
+
+go_library(
+    name = "go_default_library",
+    srcs = ["savestdout.go"],
+    importpath = "git.monogon.dev/source/nexantic.git/build/savestdout",
+    visibility = ["//visibility:private"],
+)
+
+go_binary(
+    name = "savestdout",
+    embed = [":go_default_library"],
+    visibility = ["//visibility:public"],
+)