Internal: make sure that all shard level requests hold the original indices

A request that relates to indices (`IndicesRequest` or `CompositeIndicesRequest`) might be converted to some other internal request (e.g. shard level request) that gets forwarded to the nodes that hold the relevant shard. Those requests contain the concrete index they refer to, but it is not known which indices (or aliases or expressions) the original request related to.

This commit makes sure that the original indices are available in the shard level requests and make them implement IndicesRequest as well.

Also every internal request should be created passing in the original request, so that the original headers, together with the eventual original indices, get copied to it. Corrected some places where this information was lost.

NOTE: As for the bulk api, its shard level requests won't keep around the whole set of original indices, but only the ones that related to the bulk items sent to each shard, the important bit is that we keep the original names though, not only the concrete ones.