This commit introduce the type arrow_flag in place of string to represent labelled arguments.

Previously, labelled arguments where encoded as a string tagging the left hand-side of an arrow type:
"" is the absence of label, "?ident" for optional arguments, "ident" for labelled arguments.

The arrow_flag variant now brings more structure to function arguments.
The purpose is two fold: offers a proper encoding of labels rather than relying on string processing, and ease further extensions of arrow lhs.

Some people wondered about the status of this PR:
in https://github.com/ocaml/ocaml/pull/25, [^] Jacques suggested that he was willing to integrate the change, but probably with a re-implementation rather than a direct merge.

Shouldn't we take this opportunity to clean up Pexp_fun, which seems a little bit weird, with an "expression option" argument that can be non-None only when the arg_label is Optional. We could introduce another type: