ZooKeeper based controller for a procedure member.
There can only be one {@link ZKProcedureMemberRpcs} per procedure type per member,since each procedure type is bound to a single set of znodes. You can have multiple {@link ZKProcedureMemberRpcs} on the same server, each serving a different membername, but each individual rpcs is still bound to a single member name (and since they are used to determine global progress, its important to not get this wrong).
To make this slightly more confusing, you can run multiple, concurrent procedures at the same time (as long as they have different types), from the same controller, but the same node name must be used for each procedure (though there is no conflict between the two procedure as long as they have distinct names).
There is no real error recovery with this mechanism currently -- if any the coordinator fails, its re-initialization will delete the znodes and require all in progress subprocedures to start anew.