pw_preprocessor: Improve macro arg handling

- Add PW_LAST_ARG, PW_DROP_LAST_ARG, and PW_DROP_LAST_ARG_IF_EMPTY.
- Reimplement PW_COMMA_ARGS and PW_DELEGATE_BY_ARG_COUNT in terms of
  these new macros. This makes macros built with these more robust.
- Add a test for PW_COMMA_ARGS that demonstrates why it should not be
  used when invoking a function-like macro.

Change-Id: I862f70623d53fdd7eee1440f91161981e12ce892
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/16283
Reviewed-by: Keir Mierle <keir@google.com>
Commit-Queue: Keir Mierle <keir@google.com>
diff --git a/pw_preprocessor/BUILD b/pw_preprocessor/BUILD
index 1b937ce..439e383 100644
--- a/pw_preprocessor/BUILD
+++ b/pw_preprocessor/BUILD
@@ -24,6 +24,7 @@
 
 pw_cc_library(
     name = "pw_preprocessor",
+    srcs = ["public/pw_preprocessor/internal/arg_count_impl.h"],
     hdrs = glob(["public/pw_preprocessor/*.h"]),
     includes = ["public"],
 )