pw_build, pw_toolchain: Add default configs

This CL reworks toolchains to be defined as scopes composing configs and
toolchain args. This allows individual targets to add configs to or
remove configs from the defaults.

Change-Id: I105a231f3e2de35499e1617241f3eeb42ef3248d
diff --git a/pw_build/BUILD.gn b/pw_build/BUILD.gn
index 38afdf8..c2566d2 100644
--- a/pw_build/BUILD.gn
+++ b/pw_build/BUILD.gn
@@ -14,13 +14,12 @@
 
 import("$dir_pw_docgen/docs.gni")
 
-# The default config is applied to all targets in Pigweed's BUILDCONFIG.gn.
-config("default") {
-  configs = [
-    ":debugging",
-    ":reduced_size",
-    ":strict_warnings",
+config("colorize_output") {
+  cflags = [
+    # Colorize output. Ninja's Clang invocation disables color by default.
+    "-fdiagnostics-color",
   ]
+  ldflags = cflags
 }
 
 config("debugging") {
@@ -28,6 +27,32 @@
   cflags = [ "-g" ]
 }
 
+config("extra_debugging") {
+  # Include things like macro expansion in debug info.
+  cflags = [ "-g3" ]
+}
+
+# Optimization levels
+config("optimize_debugging") {
+  cflags = [ "-Og" ]
+  ldflags = cflags
+}
+
+config("optimize_speed") {
+  cflags = [ "-O2" ]
+  ldflags = cflags
+}
+
+config("optimize_more_speed") {
+  cflags = [ "-O3" ]
+  ldflags = cflags
+}
+
+config("optimize_size") {
+  cflags = [ "-Os" ]
+  ldflags = cflags
+}
+
 # Standard compiler flags to reduce output binary size.
 config("reduced_size") {
   cflags = [