WIP: Adding retrieve_variants to the Searcher API

Based on some feedback from some of our clients and my own personal experience, the search features provided by `/api/variants` are a bit lacking. They very often don't return the results you want. This is the endpoint used on the product picker in the admin backend, btw (but you probably knew that already). Ideally, you'd be able to hook into this and set your own searching logic to the task (like in products), but there's no way to do this for variants.

I propose that the `Spree::Core::Search::Base` class needs to define an API for variant searching, and this patch hints at the kind of API I would expect. The caveat is that this API differs from `retrieve_products` in that it doesn't build the scope inside the method, but rather the scope is provided to it and then it can do searching based on whatever `params[:q]` is.

I'm on the fence about adding a `retrieve_variants` method to `Spree::Core::Search::Base` which has a different API and different functionality to that of the `retrieve_products` method there. It *feels* like I'm trying to squish too much into that one class.

---

So here's what I was thinking: let's keep `Spree::Core::Search::Base` but move all the product searching logic into another class, called `Spree::Core::Search::Product`. Then we could have another class called `Spree::Core::Search::Variant` and I'd be able to define my `retrieve_variants` method in there if I so pleased.

How does this sound?