Break up mutually recursive defs
Break up mutually recursive defs

Summary:
The previous two diffs in this stack break the slab of mutually recursive
definitions. This diff actually changes the definitions to reflect that. This
diff only moves things around and changes `and` to `let` in a few places.

I separated this diff out for ease of reviewing, but also because I'd be happy
to abandon this part of the work. I don't mind unnecessarily recursive
definitions very much, except that they have a tendency to grow and grow, as
we've seen in statement.ml and flow_js.ml.

Reviewed By: panagosg7

Differential Revision: D26479744

fbshipit-source-id: 7540af930050a45ce873bf504ab64b605d4cd458

nmote/flow,nmote/flow,nmote/flow,nmote/flow,nmote/flow,nmote/flow,nmote/flow