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.
Yes, actually I've just been working on that.

The thing is, to extract the `ExprOp` from the array args seems to require a fully annotated subtree, so switching to `scanPara0`, as far as I can tell. That will work, but makes the phase more complicated than it otherwise needs to be. Once again, this is fallout from having a node in the middle which cannot be represented as an exprOp (the `Range` node, or else the array we compile it to, the issue is the same).

Also, in the process of attempting to implement this with `scanPara2`, I discovered that our new extractors really aren't useful there, because the nodes have an eccentric type: `LogicalPlan[(Term[LogicalPlan], A, B)]`. Bummer.