Extract query string preprocessing into a filter.

This means we can re-use it automatically in the combined search.
Test the existing behaviour of ResultSet.
Split out method for ResultSets from elasticsearch.

So we can transform and combine ResultSets without needing to fiddle
around with the details of the elasticsearch response format.
Separate result score from the document fields.

This is a first step toward being able to use the score to weight and
merge result lists.
Allow weighting on documents and result sets.

The top result logic needs this weighting, at least until such a point
as we have cross-index querying for the top results.
Allow merging result sets.
Take the top n results from a set.
Allow subtracting one ResultSet from another.
Combined search across indices.

This is a basic working implementation, albeit with no tests and
hard-coded index names (which will cause problems for testing). Next
step is to extract the presentation logic.
Add a class to combine GOV.UK searches.

This does much the same thing as the controller-level code, but in a
testable way. As seen by the tests.
Add a class to present combined search results.
Use the new combined search classes in the app.
Integration test for combined search.