Life-cycle of delayed/propagated goals implemented.
Life-cycle of delayed/propagated goals implemented.

Tested on the hard code rule:
(_ |- foo N) <=> 0 < N, M is N - 1 | (_ |- foo M)

Implementation:
1) we added a new list of new_delayed goals;
   add/remove_constraint adds/remove the input from the list
2) during resume_all, for each variable in new_delayed the propagate
   function is called to determine the cumulative lists of constraints
   to be added/removed
3) for the time being, propagate implement the only propagation rule above

INVARIANT: new_delayed must be empty at choice points.
NOTE: in CHR rules, the guards are executed by the host language that,
in our case, may introduce choice points, violating the invariant :-/
This will be a problem when we decide how to implement propagate properly.

LPCIC/elpi