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.
If `BETWEEN A AND B` is being parsed as `BETWEEN(A, B)`, then there's no array and we can convert not just the arguments to expr ops (assuming it's possible), but also the `BETWEEN`.

`scanPara0` is the one you want. It gives you the input annotation on the current node (`Attr[F, A]`), and both the input & output annotations on the subtree `Attr[F, (A, B)]`. I don't think there's any scanning paramorphism more powerful than that, although I'd be delighted to learn if there were. :)