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.
The problem is that you can't generate an expr op for something that has an array in it, because the array has no expr op annotation (I actually talked to an engineer at MongoDB about this limitation). You can "fake" it by peering into the children, but that's not a general purpose solution and introduces more problems than it solves.

I guess another separate issue is that we probably shouldn't be generating an array for `Range`, and instead `BETWEEN A AND B` should instead be parsed to `BETWEEN(A, B)`, which seems totally reasonable and completely solves this problem in a clean fashion.