Change GetFieldMapping API to broadcast requests to nodes hosting the relevant indices.

This is due to the fact that have to have mappers in order to return the response.

Closes #5177
[TEST] Added get field mapping test variant that tests with a cluster that has a master only node.
Added TransportGetFieldMappingsIndexAction that uses TransportSingleCustomOperationAction as base class, with the goal to reuse common logic (like: retry on failures, shard picking, connecting to nodes)
Need use ensureYellow() b/c get mapping request checks the mapping on the master node
Need use ensureYellow() b/c get mapping request checks on actual shard instead of master node
Made SearchContextHighlight.Field class immutable to prevent from erroneously updating it, as it doesn't necessarily map to a single field

A Field instance can map to multiple actual fields when using wildcard expressions. Each actual field should use the proper highlighter depending on the available data structure (e.g. term_vectors), while we currently select the highlighter for the first field and we keep using the same for all the fields that match the wildcard expression.

Modified also how the PercolateContext sets the forceSource option, in a global manner now rather than per field.

Closes #5175