Created BaseSearchResults class

Moved some logic from ElasticSearchResults into it
DB search now returns a SearchResults object

Previously, it returned a QuerySet which gave the database backend much
more API than the Elasticsearch backend has. Which could potentially
cause issues if the developer is using the DB backend locally and the
Elasticsearch backend on their production server.

Fixes #460
Created BaseSearchQuery class

Moved some logic from ElasticSearchQuery into it
Added DBSearchQuery class

This makes sure that the user is not filtering on any fields that are
not in search_fields. It also prevents the user from using any features
of QuerySet that are not in the search API