A recursive decoder means we can't decode arbitrarily-deep JSON hierarchies. If we switch to storing our decoding state in an array instead of on the stack, we can remove this limitation.
Note: Test performance to make sure that using an array doesn't noticeably slow down the decoder.