Adds some extra filters and a way to combine filters.

Also adds documentation and testing.
when I first saw `and` and the comments above, my initial thought was that it would be:
```
def and(f: RowFilter): RowFilter = RowFilter(l => (run(l) |@| f.run(l)) { _ ++ _ })
```

Can we make it a bit clearer that the filters are forming a pipeline? Or some other similar wording?