Short functor type syntax

Add support for simple functor types of the form:

    S -> T

equivalent to:

    functor (_ : S) -> T

The `S` and `T` can be any module type expressions. 

While not actually ambiguous there is a potential shift-reduce conflict related to with constraints:

    S with type t = int -> float

vs

    S with type t = int -> T

This is resolved in favour of the first one (shift), meaning that the second type must be written:

    (S with type t = int) -> T