Revert "change recursive-contract to reject cyclic values"

This reverts commit d664ee1430302e225e77b9cfc546e819a7983c3f.

This commit broke recursive-contract because it disallowed any sharing,
not just cycles. And fixing this in the obvious way leads to about a 20x
slowdown (compared to v6.0's recursive-contract) on the micro-benchmark
mentioned in the original change to recursive contract.

So, for now, just go back to accepting cycles.
add a test case to be sure recursive-contract accepts
values with sharing but without cycles