[Search] Refactor: implement asynchronous search

To prevent UI from blocking and to prevent excessive searches, the
custom model needs to be refactored to not do synchronous searches in
on_get_value().

This is achieved by
 * adding  SearchModel.set_request_range() so the view can inform the
   model of the required rows
 * Adding a dict-based cache for the search results
 * Adding row-inserted/changed/deleted signals to the model

The commit is fairly large, but I did not see a way to do this in parts and still keep the in-between commits functional.

Fixes #2

Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>