No idea if garbage collection is needed since it kinda mimics Rust's
lifetime system but /shrugs/ probably not what the monkey spec
recommends? idk, there aren't any pointers so I think it'd be fine (for
now, at least...)
Tried using pure recursion before, but Pratt Parsers are much more
ergonomic to write using looping instead. There should be no change in
the output of the parser.