Translate between kernel and model/javascript node references.

The translation is performed for each value (property value, method or
event parameter, or return value) that crosses between the kernel and
the model/javascript driver. This allows components to make persistent,
direct node references. Nodes may be assigned to properties and passed
through methods and events.

References #3088.
Replicate node references.

Regular properties replicate as `{ propertyName: value, ... }`, or the
more general `{ propertyName: { value: value }, ... }`. Extend the
general form to encode properties containing node references as `{
propertyName: { node: nodeID }, ... }`.

The `node` field indicates that the property is a node reference instead
of a simple value. Using a distinict field ensures that the reference
won't be confused with any other value that could otherwise resemble a
node ID.

References #3088.