Towards a while/until construct

The idea is to make something like the `range(min;max)` builtin, but
which outputs its input repeatedly until an argument expression returns
false (`while`) or true (`until`), then it should backtrack (like
range).

The use case for this is `read`.  Currently one can do:

    jq -n 'range(0;1000000)|0|read|<do stuff>'

and once stdin has EOF `read` will behave like `empty`, and the jq
program will cease to output.  However, the `range` expression will
continue to produce numbers until max is reached, wasting cycles
unnecessarily.

A `while`/`until` should allow for this:

    jq -n '0|until(eof)|read|<do stuff>'
WIP
WIP
WIP