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/htx.c b/src/htx.c
index 3370cd3..76b6549 100644
--- a/src/htx.c
+++ b/src/htx.c
@@ -328,7 +328,10 @@
 
 	/* This is the last block in use */
 	if (htx->head == htx->tail) {
+		uint32_t flags = htx->flags; /* Preserve flags */
+
 		htx_reset(htx);
+		htx->flags |= flags;
 		return NULL;
 	}
 
@@ -638,7 +641,7 @@
 }
 
 /* Transfer HTX blocks from <src> to <dst>, stopping on the first block of the
- * type <mark> (typically EOH or EOM) or when <count> bytes were moved
+ * type <mark> (typically EOH or EOT) or when <count> bytes were moved
  * (including payload and meta-data). It returns the number of bytes moved and
  * the last HTX block inserted in <dst>.
  */
@@ -712,7 +715,7 @@
 		}
 	  next:
 		blk = htx_remove_blk(src, blk);
-		if (type == mark)
+		if (type != HTX_BLK_UNUSED && type == mark)
 			break;
 	}
 
@@ -917,8 +920,8 @@
 	return htx_add_endof(htx, HTX_BLK_EOT);
 }
 
-/* Adds an HTX block of type EOH, EOT, or EOM in <htx>. It returns the new block
- * on success. Otherwise, it returns NULL.
+/* Adds an HTX block of type EOH or EOT in <htx>. It returns the new block on
+ * success. Otherwise, it returns NULL.
  */
 struct htx_blk *htx_add_endof(struct htx *htx, enum htx_blk_type type)
 {