Previously we searched over streams of states, that provided solutions
to the searched sub-goals. This meant though, that if you attempted to
search in a goal which couldn't make progress like the "unproductive"
rule below, it would block forever with no way to yield back to the rest
of the search without producing a wrong result.
unproductive(X) :- unproductive(X).
The new search works via iterators over Step instead of over State,
where a Step::Working represents a goal which was unable to produce a
result, and instead decided to yield, and a Step::Soln(State) is a
solution like before.
Currently the only goal which will introduce new Working states into the
stream is the delay constructor, before forcing, since recursive goals
are the only non-terminating goals that are in the core.