build/analysis/importsort: init

This adds an analyzer which enforces import sorting as per
CODING_STANDARDS.md. It is not yet enabled in nogo.

This effectively duplicates some logic that is present in goimports.
However, that logic is mostly within an 'internal' package in x/tools,
and would be somewhat tricky to make work within the framework of an
analysis.Analyser (as it expects to also mutate a file). Thus, we
end up writing the analysis logic ourselves. Tests are provided to make
sure this logic doesn't rot away.

We also move some common logic from 'noioutil' to a new 'lib' package,
and implement the last piece of the puzzle there: a code generator to
provide information about the toolchain's stdlib as a map/set.

Change-Id: Ia0f32d6f9122e13117d18ae781d8255c6e3a887d
Reviewed-on: https://review.monogon.dev/c/monogon/+/494
Reviewed-by: Leopold Schabel <leo@nexantic.com>
diff --git a/build/analysis/lib/BUILD.bazel b/build/analysis/lib/BUILD.bazel
new file mode 100644
index 0000000..42666bf
--- /dev/null
+++ b/build/analysis/lib/BUILD.bazel
@@ -0,0 +1,18 @@
+load("@io_bazel_rules_go//go:def.bzl", "go_library")
+
+go_library(
+    name = "go_default_library",
+    srcs = [
+        "generated.go",
+        "stdlib_packages.go",
+    ],
+    importpath = "source.monogon.dev/build/analysis/lib",
+    visibility = ["//visibility:public"],
+)
+
+genrule(
+    name = "stdlib_packages",
+    outs = ["stdlib_packages.go"],
+    cmd = "$(location //build/analysis/lib/genstd) $@",
+    tools = ["//build/analysis/lib/genstd"],
+)