Allow searching across multiple indexes.

This adds support for SearchServer.index to be given a comma separated
list of index names instead of a single index name.  Elasticsearch
understands this syntax for referencing multiple indexes.

This paves the way for us to perform a search across multiple indexes in
elasticsearch, rather than having to join the results in Ruby.
Split setup routines for multi-index tests out.

This moves the setup code for the combined search integration tests into
a separate base class from the tests.  This allows the same setup to be
reused for tests of the unified search.
Add Elasticsearch.Index.raw_search().

This performs a search directly in elasticsearch given a payload.  It
abstracts a little common code from the "search" and "advanced_search"
methods, but I mainly want to do this so that I can call this directly
from the new UnifiedSearcher.

Why start breaking the abstraction that Elasticsearch-specific stuff
should live in "elasticsearch"?  Because it's a false abstraction;
rummager only supports elasticsearch as a backend and there's no clean
api for the elasticsearch module; elasticsearch specific idioms and
schema handling code permeate most of the rummager code.  Ultimately we
should get replace most of the code in the elasticsearch directory by
using the official elasticsearch client.
Add unf for unicode normalization

This is needed to normalise the query received from the user, so that we
can reliably remove excess whitespace and compare queries.
Add unified search endpoint.

Adds a /unified_search.json endpoint that will be used for the new
gov.uk search, returning one combined stream of results.

This uses a UnifiedSearchBuilder for constructing the elasticsearch
queries, a UnifiedSearchPresenter for formatting the result sets, and a
UnifiedSearcher for performing the search.