support complex filtering by using `Filter`

1. change variable names for better readability:
    + differentiate `filter_` into `query_params` and `lookup`
    + change "view/form/serializer/filter" to
    "view_cls/form_cls/serializer_cls/filter_cls"
2. support complex filtering in MongoDB-style by overriding
`query`/`query_<name>` methods in subclasses of `Filter`
3. use `mongosql` to support SqlAlchemy queries with MongoDB-style syntax
4. update tests and demo