feat: CON-1618 IDKG hashes in blocks assembler & stripper
In order to conserve bandwidth, some artifacts are stripped from the block payload and replaced by hashes (IDs), before the block is transmitted. Receivers of such a block then assemble the stripped block proposal by searching for the missing artifacts in their own pools, and if they cannot be found, download them from a different peer.
Previously, only ingress messages were stripped from block proposals. With this PR, we will start to do the same for IDkg dealings. This is done by removing any IDKG dealings from the block payload, and instead only inserting their IDs into a separate payload field as part of the "stripped block proposal".
In https://github.com/dfinity/ic/pull/7794, we implemented a way to insert missing IDKG dealings that were stripped from a block into the BlockProposalAssembler, which is the structure keeping track of all messages that are required in order to reassemble the full block proposal.
This PR adds the functionality to perform the assembling of the full block proposal, given a BlockProposalAssembler containing the stripped proposal, together with any missing ingress and IDKG dealing messages.
Finally, we extend existing benches and unit tests for ingress messages to also cover hashes in blocks for IDKG dealings.