Same treatment let-like bindings in comp and expr

The treatment of local bindings (let bindings, variables, etc.) is now the same
in the comp language and in the expression language, with the following
correspondance:

    Comp language       Expr language
    ---------------------------------
    parseCommand        parseStmt
    parseComp           parseSimpleStmt
    parseLetDecl        parseELetDecl
    cLetDecl            eLetDecl
    GLetDecl            GELetDecl
    LetDecl             ELetDecl

This paves the way for addressing #33 and #55, although this commit itself is a
semantics preserving change (verified that all tests, including WiFi tests,
still generate the same parse trees).
Add support for local funs (front end only)

This commit adds support for local function definitions in the expression
language to the front end of the compiler: updated the parser, the ADT, the
renamer, and the type checker, but if you actually try to use local function
definitions the following functions will throw runtime exceptions:

- range analysis (`erange`)
- use-def analysis (`varUseDefs`)
- LUT analysis (`shouldLUT`)
- auto-LUT (`runAutoLUT`)
- code generation (`codeGenExp`)

This goes some way towards implementing #33.

NOTE: The AST for existing code is unaffected.