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.
Yes, we do need to transform the failure list to an array if their are any failures. The if statement saves to call to asList, addAll and toArray if there are no failures, which is the case most of the time.