Refactor copy() so it can be reused for local copy operations
Add test cases for possible connect-disconnect transitions
Allow local copies (i.e.: cp /some/znode /other/znode) reusing the current session