Add version numbers to protocol interfaces and implementation.
Allow allocating user_data in proxy and resource
Use separate methods to set implementation.
Add protocol object to keep track of available protocols and
interfaces. Add possibility to dynamically register interfaces.
When the client is busy, no methods are allowed on it until it
becomes not busy again. We can use this to wait until an async operation
completes (access checks) and to serialize the requests from the client.
Replace the AsyncDone event with an explicit done callback in the node
to signal completion of an async operation.
Pass read and write fd together with the transport