Added `_shards` header to all write responses.

The header indicates to how many shard copies (primary and replicas shards) a write was supposed to go to, to how many shard copies to write succeeded and potentially captures shard failures if writing into a replica shard fails.

For async writes it also includes the number of shards a write is still pending.
The responses are created on the primary shard while the _shards header is constructed and modified while replication is in progress, that makes a bit weird if we supply it when the action of the primary has completed. 

Also on certain responses (delete by query) we need to aggregate the shard responses's _shards header and supply it a level higher up. (same from index response to indices response). So that is why the setter is there.