(For now) simplify cyclic printing, and make it work for non-ref cycles

Since we never had consensus on the previous algorithm, I decided to simplify
this a bit.  If we end up wanting to support graph and mutable-graph, we can
come back to it.

This now keeps track of a cache of arrays, objects, and refs on each path taken
through the values while printing.

It still tracks whether a ref should be treated as implicit or not (e.g.
because the data constructor does it), but doesn't attempt to build a graph
after the fact.
add a dummy stack slot for calls to recursive methods, and test for stack overflow cases