ace code editor with mouseover tooltips
starting to add AcePrinter

- right now just some dummy hover annotations are inserted,
  no types or heap environments yet
AcePrinter now displays types and heapenvs!

- moving type_env and heap_env types to Lang
- stuffing type/heapenv info in exp and stmt records so that
  AcePrinter can print mouseover tooltips
- added TPlaceholder as dummy types which get replaced during type
  checking and translation
- okE and okS are helpers that stuff synthesized type/heapenv into the
  rewritten expressions/statements, with very little change to existing
  type checking code
- AcePrinter displays tooltips with types and heap environments in lots of
  useful places. to get around some issues with the Ace/JS tokenizer
  (haven't tried playing with this yet):
  . inserting extra space before ";"
  . inserinng extra space before "," in lists
  . using bracket notation everywhere instead of "." notation
tc error messages highlighted by AcePrinter

- "TC_ERROR" string is a highlighted range
- and its hover annotation displays the error message
using JS-style comments for {E,S}TcInsert

- HideInComment printing tree for dealing with tc-inserted things
- simple check to try single line comments (//: ...) if possible,
  otherwise multi-line (/*: ... */)
- since JS comments can't be nested, don't want to have nested TcInserts,
  which has been happening for hoisted scalar casts:
    [x = [cast](x)]
  so tweaking Typing.coerce to _not_ inserted ETcInsert, and it's up
  to the caller to do so if hoisting/backtracking is not being done.
some HideInComments should not be single line

- ones that appear in expression position should always be multi-line,
  since otherwise the rest of the code on the line will be in comments.
  see e.g. tests/objects-2/test-06.is.html
- so only inserted statements should be possibly made single line
- added a flag to HideInComments to choose between these two modes
extra_info hover annotations

for EApp, SVarInvariant, and SClose
printing types, typedefs, externs in comments

function declarations are printed as

    //: f :: T
    var f = function ...

all other annotated expressions are printed as

    /*: T */ e
preserving blank lines in AST
printing ELets in comments
Merge branch 'ace'