Support for null values

Neither null literals (in expressions) nor nulls returns from builtins
were supported. Nulls in return values round-tripped via JSON to
ever-expanding object wrappers.

This adds support for null literals in the interpreter, and displaying
null values in the client. Much is complicated by JS considering null
an object-typed value; for example, widgetizing values requires a
special case for null.

Null values are represented in the interpreter with the singleton type
inull. However, it is occasionally not clear or even defined whether
procedures return interpreter ('i') values or JS values. In
particular, IValue.decodeJSON can return bare JS values or
IObject/IArray/iundefined; but returning inull gives the wrong result when the value is in an object field.