Internal: clarify when a shard search request gets created to be only used locally

In some cases a shard search request gets created on a node to be only used there and never sent over the transport. This commit introduces two static "factory" methods and makes the existing local constructors private so that it's clearer when a shard search request will be only used locally. If a shard level request doesn't get sent over the transport nor executed via transport action, it doesn't need to hold the original request headers nor the original indices. Thus the original indices become non optional for requests that get serialized, and we throw an exception when we try to serialize a request created through the local static methods.

Took the chance to remove an unused InternalScrollSearchRequest constructor and an empty else branch in `TransportSearchScrollQueryAndFetchAction`.

Closes #7855