a better fix for the 4.00.1 + existential type issue

The source of the problem was the Locate case that instantiates the
GADT parameter with a polymorphic variant:

  type _ request =
  | ...
  | Locate
    :  string * position option
    -> [ `Found of string option * Lexing.position
       | `Not_in_env of string
       | `File_not_found of string
       | `Not_found
       ] request

Instantiation of rigid variables with polymorphic variant was
ill-supported in 4.00.1 and improved in 4.01, hence the
backward-incompatibility of the code before the first fix. The first
fix adds annotation everywhere, at a strong cost in concision and
readability; it is in fact sufficient to avoid "opening" the
polymorphic variant in the pattern-matching that does the
GADT-instantiation: instead of

  | Locate _, `Not_found ->
    `String "Not found"
  | Locate _, `Not_in_env str ->
    `String (Printf.sprintf "Not in environment '%s'" str)
  | Locate _, ...

write

  | Locate _, resp ->
    begin match resp with
      | `Not_found -> `String "Not found"
      | `Not_in_env str ->
        `String (Printf.sprintf "Not in environment '%s'" str)
      | ...
    end