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.

Took the chance to remove an unused `InternalScrollSearchRequest` constructor and an empty else branch in `TransportSearchScrollQueryAndFetchAction`.
I think it clarifies things, makes it clear when the shard search request is used locally and when it's sent over the transport. Better than static factories cause you can't now send `ShardSearchLocalRequest` over the transport at all as it doesn't implement `TransportRequest`. Also makes it more explicit that the binary representation is used as a cache key.

Maybe if things don't make sense it's because the way we use `ShardSearchRequest` is confusing per se and this PR doesn't clean it all up. How do you suggest we can improve this further?