variable interpolation in strings:
==================================

"foo" -> ("foo")
"hi $name" is expanded -> ("hi " + $name)  
"my name is ${name}athon" -> ("my name is " + $name + "athon")

   NOTE: extra tokens for parens and opt. plus signs


typing:
=======

strong typing.
casting functions builtin.


class declarations:
===================

only allowed in the core.
they could be allowed in the layout layer as well, but then there are problems:
  - need syntax to create objects at run-time
  - class namespace (what if we add a new class to the core later?)
  - little need, anyway.


function declarations:
=====================

function declarations inside class declarations (method declations)
are only declarations.  since class declarations can only be in the
core, so can declarations of new methods.

function declarations outside classes are either:
  1) empty (no StmtBlock).  look like C prototypes. this implies the
  function is built-in (defined in s2builtin.pl).  only allowed in
  core.
  2) defined, with body.  allowed in all layers, with the following
     restrictions:
     - can only override existing functions in theme, i18n, user
     layers
     - free users can only define 1 or 2 functions in their user
     layer, though they can define all available properties.

