Add depth-tracking and impose a depth limit
One dangerous case was identified by running ZJ through the JSON Test Suite: allocation of tens of thousands of empty, nested maps.
This does not cause a simple crash, it causes a non-Erlang style crash: the whole EVM can OOM trying to allocate 8GB on the heap. Obviously this isn't what we want -- nothing passed to ZJ should ever be able to kill the entire VM. (Some flat JSON that is so big it would OOM the VM will at least be noticed as problematic by other metrics as well -- but allocation of nested maps 20k levels deep only requires about a 40kb string. That's ridiculous.)
Fixing this will require depth tracking across nested structures. The goal will be to permit such a great depth that no legitimate use cases will ever encounter it, but remain shallow enough that map allocation alone is never likely to blow up the VM. Something in the thousands, but less than tens of thousands.
Documentation will need to be updated to reflect this, of course.