location invariant syntax for objects

object literals

- var x /*: Ref T */ = { ... };

  the unannotated object literal will be stored at location "lx" and
  the invariant T will be added to input/output heaps at function
  boundaries.

- var x /*: Ref Arr(T) */ = [ ... ];
  var x /*: Ref {Arr(T)|p} */ = [ ... ];

  like the case for object literals above, but notice that you must
  write the Arr constructor with this particular syntax.

- /*: l T */ { ... }
  /*: T */ { ... }
  /*: l T */ [ ... ]
  /*: T */ [ ... ]

  for an object/array literal somewhere else (besides a var definition),
  T is added to input/output heaps at function boundaries.