Misc re-factoring to be more sensible

We had IDataStore in our UML but not in our code, so added that.
Tweaked search tests a bit.
Implemented registerView and unregisterView in Model instead of leaving that for every Model to implement.