[parser] eliminate mutual recursion
[parser] eliminate mutual recursion

Summary:
I ran into what I think is a js_of_ocaml bug, where it would create
code roughly like this:

```
function recursive_func() {
  for (;;) {
    var x = function(z) { z() },
        y = x(z),
        z = function() {};
    // ...
  }
}
```

which means that when `x(z)` is called, `z` is undefined and everything breaks.
it needs to swap `y` and `z`. The simple recursive function example only repros
with `--disable optcall`, so the tailcall optimization avoids the issue. Since
jsoo doesn't optimize mutual recursion, the `optcall` optimizer doesn't help in
that case.

So, to avoid the issue, this diff rearranges everything to eliminate mutual
recursion. Self-recursion is fine as long as they're tailcalls.

In a couple of places, I made the functions not recursive, and then wrote a
small recursive helper that calls them until they return a `Token` instead of a
`Continue`. I think some of the calls are not tail calls when those functions
are directly recursive, which may be something we can come back and fix later.

Reviewed By: avikchaudhuri

Differential Revision: D5723537

fbshipit-source-id: 55e0d3f92c1712c6489d07757905318252f8d924

ylu1317/flow,AgentME/flow,jamesgpearce/flow,gabelevi/flow,samwgoldman/flow,claudiopro/flow,AgentME/flow,claudiopro/flow,nmote/flow,gabelevi/flow,TiddoLangerak/flow,MichaelDeBoey/flow,mroch/flow,facebook/flow,JonathanUsername/flow,JonathanUsername/flow,TiddoLangerak/flow,jamesgpearce/flow,jamesgpearce/flow,samwgoldman/flow,facebook/flow,facebook/flow,samwgoldman/flow,samwgoldman/flow,mroch/flow,TiddoLangerak/flow,ylu1317/flow,JonathanUsername/flow,claudiopro/flow,popham/flow,jamesgpearce/flow,gabelevi/flow,jamesgpearce/flow,samwgoldman/flow,popham/flow,facebook/flow,popham/flow,TiddoLangerak/flow,jamesgpearce/flow,AgentME/flow,samwgoldman/flow,samwgoldman/flow,gabelevi/flow,popham/flow,MichaelDeBoey/flow,JonathanUsername/flow,nmote/flow,gabelevi/flow,facebook/flow,gabelevi/flow,AgentME/flow,claudiopro/flow,nmote/flow,popham/flow,gabelevi/flow,nmote/flow,facebook/flow,mroch/flow,ylu1317/flow,claudiopro/flow,popham/flow,nmote/flow,nmote/flow,popham/flow,JonathanUsername/flow,MichaelDeBoey/flow,JonathanUsername/flow,mroch/flow,JonathanUsername/flow,ylu1317/flow,nmote/flow,AgentME/flow,MichaelDeBoey/flow,MichaelDeBoey/flow,jamesgpearce/flow,facebook/flow,ylu1317/flow,TiddoLangerak/flow,mroch/flow,mroch/flow,mroch/flow