Design wrappers for filter expressions
At the end of this task we will have classes (and standalone functions) to create filter expressions.
The first step is to write a design doc for how they would work, and break down the work into smaller issues.