Added `cross_fields` mode to multi_match query

`cross_fields` attemps to treat fields with the same analysis
configuration as a single field and uses maximum score promotion or
combination of the scores based depending on the `use_dis_max` setting.
By default scores are combined.

Relates to #2959
Next iteration
 * reduced the modes to the type parameter
 * deprecate use_dis_max
 * uses the tie-breaker to identify if a dismax needs to be used
 * uses a tie-breaker inside the BlendedTermQuery to make sure we have a
   slight bias towards the low frequent field if there is one

Remaining work:
 * document the API
 * ensure tests are stable across large number of runs - there is lots
   of randomness
 * Add more documentation to the Java classes
 * Add explicit tests for all the other Types