Generate filter/project methods only with required arguments

The compiler was previously generating them with all inputs across all filters and
projections as arguments, regardless of whether they were needed in the method body
Minor cleanup in ExpressionKey

Reuse SubExpressionExtractor and make code more readable