add ppx_gen_rec
add ppx_gen_rec

Summary:
adds a ppx that generates structs from signatures in a recursive module
declaration. that is, from this:

```
module%gen rec Foo : sig
  type t = string
end = Foo
and Bar : sig
  type t = int
end = Bar
```

to this:

```
module rec Foo : sig
  type t = string
end = struct
  type t = string
end
and Bar : sig
  type t = int
end = struct
  type t = int
end
```

This is basically what ocaml does on its own. The benefit is that it allows
ppx_deriving to work, since it does different things depending on whether the
annotation is in a signature or a structure.

```
module Foo : sig
  type t = string [@deriving show]
end = struct
  type t = string [@deriving show]
end
```

turns the first `[@deriving show]` annotation into the signature for the `show`
function, and the second `[@deriving show]` into the implementation. Without
this ppx, it would just generate the signature but no implementation, which
leads to "Undefined recursive module" errors (https://github.com/ocaml-ppx/ppx_deriving/issues/142)

Reviewed By: samwgoldman

Differential Revision: D6102790

fbshipit-source-id: 5edfc5477f600a8e103a1b7cbd8d621a8114b641

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