Result of Shardex.group/4: items grouped by shard, plus every item that
could not be routed with its reason. Items keep their input order.
Summary
Types
@type group() :: %{shard: Shardex.Shard.t(), pool: Shardex.Pool.t(), items: [term()]}
@type t() :: %Shardex.Batch{ errors: [{term(), Shardex.reason()}], groups: %{required(atom()) => group()} }