parser: add jsdocs for the `process()` function
parser: use a thunk-based "trampoline" technique to prevent stack overflows on synchronous parsers

I'm gonna need to do some more testing with this, but I'm pretty sure it's close
to correct. I *think* I can break it by doing a combination of async and sync
reads, but I'll play around with that later. For now, all the tests pass!

Closes #3.