[Search] Refactor: separate generic model code from search

Create a new GenericModel class and put most of SearchModel code
there. Subclass SearchModel from GenericModel. Later we can use
GenericModel for BrowseModel as well, removing duplicate code.

No functional changes.

Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
[Model] Name column indexes

This makes it easier to change the model without breaking things outside
the model.

Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
[Model] stop fetching if all results have been fetched already

This will skip one useless search/browse call in some cases.

Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
[Model] Add "static rows" in the model

This allows inserting a static row into the model that will be
inserted before the actual search/browse results: This is useful
for BrowseModel that wants to edd e.g. ".." for moving up a
directory

Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
[Browse] Use the GenericModel for Browse

This removes a lot of duplicate code and makes Browse perform as well
as Search.

Note that BrowseModels are discarded as soon as the view changes to
another "directory" (BrowseModel). Caching could be added later on.

off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>