Top level containers should affect lists too.

Due to recursion, containers didn't work as expected inside lists.

This change seems to have duplicated code, but it's a minor one.
Actually, it save some CPU cycles, because containers are scanned only
at top level, instead of at each recursion.

The first block cuts the elts before processing values and lists.

The last block assert that previously cut elements are still cut,
because the value processing paste them back (apparently).

No test breaks.