Refactor search code

This contains several improvements and bug-fixes:

* Take advantage of indexing changes in ead2f5e to reduce the number of
  round trips to execute a search
* Use Tire scan to include all matching threads
* Execute final sort/pagination in Mongo
* Share sorting code
* Eliminate separate presenter for search results (which removes unused
  highlighting functionality)

JIRA: FOR-607
Add spelling correction to text search queries

If a search has no results, then we will get suggestions from
Elasticsearch, re-query with the top suggestion, and return the results
from that query along with the suggestion that was used.

This change also changes search so that a document must match all terms
to be included in the results instead of any term.
Merge pull request #105 from edx/gprice/search-spell-correction

Refactor search, fix a bug, and implement spelling correction