MAJOR: htx: Remove the EOM block type and use HTX_FL_EOM instead

The EOM block may be removed. The HTX_FL_EOM flags is enough. Most of time,
to know if the end of the message is reached, we just need to have an empty
HTX message with HTX_FL_EOM flag set. It may also be detected when the last
block of a message with HTX_FL_EOM flag is manipulated.

Removing EOM blocks simplifies the HTX message filling. Indeed, there is no
more edge problems when the message ends but there is no more space to write
the EOM block. However, some part are more tricky. Especially the
compression filter or the FCGI mux. The compression filter must finish the
compression on the last DATA block. Before it was performed on the EOM
block, an extra DATA block with the checksum was added. Now, we must detect
the last DATA block to be sure to finish the compression. The FCGI mux on
its part must be sure to reserve the space for the empty STDIN record on the
last DATA block while this record was inserted on the EOM block.

The H2 multiplexer is probably the part that benefits the most from this
change. Indeed, it is now fairly easier to known when to set the ES flag.

The HTX documentaion has been updated accordingly.
diff --git a/src/http_htx.c b/src/http_htx.c
index 640a3dc..a42e296 100644
--- a/src/http_htx.c
+++ b/src/http_htx.c
@@ -159,7 +159,7 @@
 	for (blk = htx_get_first_blk(htx); blk; blk = htx_get_next_blk(htx, blk)) {
 	  rescan_hdr:
 		type = htx_get_blk_type(blk);
-		if (type == HTX_BLK_EOH || type == HTX_BLK_EOM)
+		if (type == HTX_BLK_EOH)
 			break;
 		if (type != HTX_BLK_HDR)
 			continue;
@@ -991,10 +991,7 @@
 		ret += sent;
 	}
 
-	if (!htx_add_endof(htx, HTX_BLK_EOM)) {
-		memprintf(errmsg, "unable to add EOM into the HTX message");
-		goto error;
-	}
+	htx->flags |= HTX_FL_EOM;
 
 	return 1;
 
@@ -2398,9 +2395,9 @@
 	return 1;
 }
 
-/* Returns 1 if the HTX message contains an EOM block. Otherwise it returns
- * 0. Concretely, it only checks the tail. The channel is chosen depending on
- * the sample direction. */
+/* Returns 1 if the HTX message contains EOM flag. Otherwise it returns 0. The
+ * channel is chosen depending on the sample direction.
+ */
 static int
 smp_fetch_htx_has_eom(const struct arg *arg_p, struct sample *smp, const char *kw, void *private)
 {
@@ -2415,7 +2412,7 @@
 	if (!htx)
 		return 0;
 
-	smp->data.u.sint = (htx_get_tail_type(htx) == HTX_BLK_EOM);
+	smp->data.u.sint = !!(htx->flags & HTX_FL_EOM);
 	smp->data.type   = SMP_T_BOOL;
 	smp->flags = SMP_F_VOLATILE | SMP_F_MAY_CHANGE;
 	return 1;