libsnapshot: Group CowOperations into clusters

This introduces clusters of CowOperations to the Cow Format, improving
reader performance by allowing many operations to be read at once.

When the header's cluster_ops is a nonzero value, operations will be
clumped into packs of that number, where the last op is a special
CowClusterOp, which points to the start of the next cluster. Each
cluster is immediately followed by it's data, with the footer following
at the end of the file.

cluster_ops must not be 1, as we must include a CowClusterOp in each
group.

Change-Id: I2855288958d56569d4078f377ef0b8c01ca5c6e7
Bug: 172026020
Test: cow_api_test
8 files changed