There are three bits of state to protect in the class:
Messages sent to it from native code: This object proxies those messages out to
various listeners. Until a replicator object is removed from the REVERSE_LOOKUP_TABLE
forwarding such a message should always work (there is no dependence on the other two states)
Calls to the native object: These should work as long as the `handle` is non-zero.
This object must be careful never to forward a call to a native object once that object has been freed.
Running state: if the underlying native replicator is running there is no need to start it again.
Likewise, if it is stopped, there is no need to start it again. Running state affects only
these two calls: it has no direct affect on either of the other two states.
WARNING!
This class and its members are referenced by name, from native code.