Search reindexer bulk imports models to Elastic Search

Indexing with Elastic Search is different: it requires the attributes of
the searchable models to be saved in to the Elastic Search index, a la
mongodb. This is pretty slow, so here we use the ES _bulk import API by
building JSON structures for the given models and then sending them to
the API.

Currently batched to 1000 records per API call to hopefully reduce any
memory usage issues.
Improves speeds of tests by ~1s

Some tests were creating more models than were needed to confidently
test a theory.
Removes index logging

Upsets test output
Searchable models return IDs

So that they can be matched back to ActiveRecord models when returned
from Elastic Search.
Introduces ElasticSearch query builders

Matchers build hashes for different types of ES queries that can be
converted in to JSON.
Search now uses Elastic Search

The Search class uses `elasticsearch-ruby` to query an Elastic Search
index.

The queries are built using Search::Query, which uses some basic child
objects to handle the creation of the matchers, filters, etc. that make up
queries.
Cleans up Search class

Moves responsibilities in to separate methods, and memoises results,
etc. so that they can be called more than once without requerying.
Basic ElasticSearch aggregation support

Search::Aggregation uses a basic JSON template to construct aggregation
data
ElasticSearch aggregations are returned as models

The Search class handles converting aggregation keys to matching models
to make view rendering easier and cleaner (but slightly less performant
-- an acceptable trade off until proven otherwise)
Basic styling for search filters
Introduces filtering by type (and filtering in general)

Search queries are now built with filters (if requested), starting with
the type of a document. This allows you to filter results to show only
Country, Region or Protected Areas.
Search controller accepts filters and passes them to Search

Currently only the `type` filter works
Adds (ugly) type filter buttons for Search results
Render ES aggregations on search page
Correctly render search results for different types of result

Countries, regions and PAs are rendered differently and thus have
different views.
Styling fixes for search page

* Adds correct styling for result type filter buttons
* Styling of search box now closely matches design
* Fixed colouring of links in results table