BETWEEN, a more mature approach

This is a work in progress.

`RANGE` is now compiled to construct an array of values.

`Between` is now handled as follows in the planner phases:
1. an `ExprOp` is constructed, but not yet used (not the correct one yet; there will be some work to represent all the expressions we support as exprOps, but I believe everything is in place to do this work). This expression will eventually be used to translate portions of the expression to JS for use with `$where`.
2. a `Selector.And` instance is constructed which is actually used.
3. the pipeline phase has a case for `Between` so as not to fail, but does nothing interesting with it. Not sure what we actually need there, if anything.
That's all happening already.

I have my `scanPara0`-based exprOp phase working now. Should I commit that or do we want to go a different way? The implementation I have will work for things like `where foo.bar between foo.baz and foo.bar*2`, once we are able to translate to `$where`. So I think it's worth something.

Incidentally, what I actually need here is `scanPara...`, accepting `(field: Input, node: LogicalPlan[Attr[LogicalPlan, Output]])`--that is, it requires the input annotation on the node only and the output annotation on the entire sub-tree--but that isn't one we have, as far as I can tell.