Cyclic array definitions (directly or through a chain of array $defs)
created a self-referential TArr, which then caused infinite recursion in
base_cpp, storage_cpp, and _walk_arrays.
Object-only cycles are already broken with std::unique_ptr, but
array-only cycles have no object edge for break_cycles to cut.
Detect them after building an array's items by following TArr.elem links
and raise a clear GenError so generation fails gracefully rather than
overflowing the Python stack.
Closes#33