Search changes

This pull request adds the following changes:

 - Scrapped ElasticUtils/pyelasticsearch. Wagtailsearch now uses elasticsearch-py
 - Tests are no longer run with wagtailsearch signal handlers enabled
 - add_bulk is now a generator (so we can provide feedback during the bulk add process)
 - Indexed class refactor
 - Queries now run on QuerySets rather than models. This allows more complex filters to be run.
 - Refactored ElasticSearch backend. (better ElasticSearchResults class, more unit testable, indexes fields with correct type, partial_match fields are indexed separately from other fields).
 - Changed configuration format

TODO (for this PR):
 - [x] Unit tests
 - [x] Python 2.6 support
 - [x] Refactor/cleanup
 - [x] Testing

TODO (for future PR):
 - Remove wagtailcore specific code from search view
 - Split editors picks into own module (Done: #223)

Example of searching on a queryset (using PageQuerySet #185):

    events.get_descendants().not_descendant_of(past_events).live().search("Hello world!")

This will search all live pages that are in the events section but exclude pages which are in the past_events sub section.
@jeffrey-hearn 
Apologies for the delay in replying.

Theres currently three settings you can set on each field in search_fields

 - __partial_match__ - Setting this to true allows results to be matched on parts of words. For example, this is set on the title field by default. So a page titled "Hello World!" will be found if the user only types "Hel" into the search box.
 - __boost__ - This allows you to set fields as being more important than others. Setting this to a high number on a field will make pages with matches in that field to be ranked higher. By default, this is set to 100 on the title field and 1 on all other fields.
 - __es_extra__ - This field is not read by wagtailsearch and is used to allow you to set or override any setting on the field in the mapping.