Data\Filter: clean up a few things

* throw useful exceptions
* our "id" should always be treated as a string
Data\Filter: add setters for all properties

To keep our filter editor simple we want our filters to handle also
operations replacing themselves.
Data\Filter: automagically handle hierarchy

This adds a few more functions assisting filters in replacing
themselves or subnodes. Introducing Filter::chain().
Widget\FilterEditor: improve the filter editor

This adds quite a bunch of changes. Part of the filter-modifying
complexity has been moved to the filter, the editor widget itself
now makes use of new filter capabilities such as changing operator
or expression type.