ENG-5096: K-safe data transfer support for @BalancePartitions

Mostly refactoring the stream snapshot code to simplify the protocol and extract the boxing of data blocks into an interface.