Revert "Remove obsolete module."

This reverts commit 09fdc59e69bddcb3df83e3fd365d5a92368d721c.
Change treatment of CPP pragmas again

We now allow CPP pragmas everywhere but, crucially, we regard CPP pragmas as
whitespace _only_ if they don't change the filename. CPP pragmas that _do_
change the filename are accepted only as part of delimiters for the top-level
list of declarations. This means that we can now accept something like

   let comp main =
      read [int] >>>
   #ifdef FOO
      something
   #else
      somethingElse
   #endif
      >>> write [int]

which we couldn't previously because we regarded these CPP pragmas as
semi-colons. Now we can, but at the same time by allowing filename changes at
top-level only we cn detect, say, a missing curly at the end of a file; for
instance, if a.blk looks like

   fun {

and b.blk tries to #include a.blk we will now get a parser error saying:

    "./a.wpl" (line 5, column 14):
    unexpected "\n"
    Unexpected end of file (#included files must consist of a complete list of declarations)
    ExitFailure 1
Deal with type annotations in let refs

(and fix parser for let refs in expressions)