Add Search functionality to the API

This change includes functionality to parse the search API parameters, build a search DSL and perform the search against elasticsearch.
I'd be tempted to phrase these tests as a table.
Input is the form, expected output is the search parameters.
That makes it trivial to add more if need be.