Replicate method and event listener changes

@eric79, this is the two existing PRs,

  - Replicate method changes  (https://github.com/virtual-world-framework/vwf/pull/276)
  - Replicate event listener changes (https://github.com/virtual-world-framework/vwf/pull/292)

plus the `preserve-script-closures` compatibility option, and method and event listener replication tests.

To provide the `listenerID` to the node. The ID is needed to remove the listener later.

It's the event listener equivalent of the browser's timer IDs:

    var timeoutID = window.setTimeout( func, delay );
    window.clearTimeout( timeoutID );

Since we have to manipulate listeners by assigning to the event (so that inheritance works correctly), the `kernel.addEventListener` result can only get back to the node through a callback. The value of an assignment statement is the value assigned. A setter can't cause any other value to be returned to the caller.

It would be used like this:

    node.events.event = node.events.add( func, node, function( listenerID ) { this.listenerID = listenerID } );
    node.events.event = node.events.remove( listenerID );