patch 8.1.0644: finding next sign ID is inefficient

Problem:    Finding next sign ID is inefficient.
Solution:   Add next_sign_id. (Yegappan Lakshmanan, closes #3717)
diff --git a/src/evalfunc.c b/src/evalfunc.c
index a9ef60e..a29f0ff 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -4434,7 +4434,7 @@
     signlist_T	*sign;
     dict_T	*d;
 
-    FOR_ALL_SIGNS_IN_BUF(buf)
+    FOR_ALL_SIGNS_IN_BUF(buf, sign)
     {
 	if ((d = sign_get_info(sign)) != NULL)
 	    list_append_dict(l, d);
@@ -11415,6 +11415,8 @@
 		group = tv_get_string_chk(&di->di_tv);
 		if (group == NULL)
 		    return;
+		if (*group == '\0')	// empty string means global group
+		    group = NULL;
 	    }
 	}
     }