Split ElasticSearchResults class up into Query and Results
This commit splits the ElasticSearchResults class into two parts
ElasticSearchQuery - Builds queries to be run on ElasticSearch backends
ElasticSearchResults - Runs queries on a backend and returns results

The reason for splitting these up is it makes unit testing easier as we can easily inspect queries without needing an ElasticSearch backend