MINOR: cfgparse/bind: suggest correct spelling for unknown bind keywords

Just like with the server keywords, now's the turn of "bind" keywords.
The difference is that 100% of the bind keywords are registered, thus
we do not need the list of extra keywords.

There are multiple bind line parsers today, all were updated:
  - peers
  - log
  - dgram-bind
  - cli

$ printf "listen f\nbind :8000 tcut\n" | ./haproxy -c -f /dev/stdin
[NOTICE] 070/101358 (25146) : haproxy version is 2.4-dev11-7b8787-26
[NOTICE] 070/101358 (25146) : path to executable is ./haproxy
[ALERT] 070/101358 (25146) : parsing [/dev/stdin:2] : 'bind :8000' unknown keyword 'tcut'; did you mean 'tcp-ut' maybe ?
[ALERT] 070/101358 (25146) : Error(s) found in configuration file : /dev/stdin
[ALERT] 070/101358 (25146) : Fatal errors found in configuration.
diff --git a/src/cli.c b/src/cli.c
index 72919ce..04c4e7a 100644
--- a/src/cli.c
+++ b/src/cli.c
@@ -290,8 +290,8 @@
 
 		cur_arg = 3;
 		while (*args[cur_arg]) {
-			static int bind_dumped;
 			struct bind_kw *kw;
+			const char *best;
 
 			kw = bind_find_kw(args[cur_arg]);
 			if (kw) {
@@ -314,15 +314,13 @@
 				continue;
 			}
 
-			if (!bind_dumped) {
-				bind_dump_kws(err);
-				indent_msg(err, 4);
-				bind_dumped = 1;
-			}
-
-			memprintf(err, "'%s %s' : unknown keyword '%s'.%s%s",
-			          args[0], args[1], args[cur_arg],
-			          err && *err ? " Registered keywords :" : "", err && *err ? *err : "");
+			best = bind_find_best_kw(args[cur_arg]);
+			if (best)
+				memprintf(err, "'%s %s' : unknown keyword '%s'. Did you mean '%s' maybe ?",
+				          args[0], args[1], args[cur_arg], best);
+			else
+				memprintf(err, "'%s %s' : unknown keyword '%s'.",
+				          args[0], args[1], args[cur_arg]);
 			return -1;
 		}
 
@@ -2656,8 +2654,8 @@
 	cur_arg = 1;
 
 	while (*args[cur_arg]) {
-			static int bind_dumped;
 			struct bind_kw *kw;
+			const char *best;
 
 			kw = bind_find_kw(args[cur_arg]);
 			if (kw) {
@@ -2680,15 +2678,13 @@
 				continue;
 			}
 
-			if (!bind_dumped) {
-				bind_dump_kws(&err);
-				indent_msg(&err, 4);
-				bind_dumped = 1;
-			}
-
-			memprintf(&err, "'%s %s' : unknown keyword '%s'.%s%s",
-			          args[0], args[1], args[cur_arg],
-			          err ? " Registered keywords :" : "", err ? err : "");
+			best = bind_find_best_kw(args[cur_arg]);
+			if (best)
+				memprintf(&err, "'%s %s' : unknown keyword '%s'. Did you mean '%s' maybe ?",
+				          args[0], args[1], args[cur_arg], best);
+			else
+				memprintf(&err, "'%s %s' : unknown keyword '%s'.",
+				          args[0], args[1], args[cur_arg]);
 			goto err;
 	}