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.
Thanks for this change.

Perhaps, while we're doing it, it might look a bit nicer as:

   "$or": []bson.M{{
        "charmrequiredinterfaces": bson.M{
            "$elemMatch": bson.M{
                "$in": entity.CharmProvidedInterfaces,
             },
         },
     }, {
        "charmprovidedinterfaces": ...
    }}

?
YMMV :)