Log error on failed underscores(), moving it to shared/

Move underscores() to shared/. It's the same as alias_normalize(), but
it rather operates in place, with the same string being passed.

The difference now that it's in shared/ is that it's a non-logging
function.

This makes us a little bit more verbose: we don't accept partially
correct module and aliases names in kcmdline and in configuration files.
We log an error instead.
diff --git a/shared/util.h b/shared/util.h
index ef3881a..e013d08 100644
--- a/shared/util.h
+++ b/shared/util.h
@@ -21,6 +21,7 @@
 #define KMOD_EXTENSION_UNCOMPRESSED ".ko"
 
 int alias_normalize(const char *alias, char buf[static PATH_MAX], size_t *len) _must_check_ __attribute__((nonnull(1,2)));
+int underscores(char *s) _must_check_;
 char *modname_normalize(const char *modname, char buf[static PATH_MAX], size_t *len) __attribute__((nonnull(1, 2)));
 char *path_to_modname(const char *path, char buf[static PATH_MAX], size_t *len) __attribute__((nonnull(2)));
 bool path_ends_with_kmod_ext(const char *path, size_t len) __attribute__((nonnull(1)));