CURATOR-157 Avoid stack traces on close

Avoid error-level stack traces closing PathChildrenCache followed by closing CuratorFramework

See details in jira: https://issues.apache.org/jira/browse/CURATOR-157
No problem, there might a problem in my reasoning, which is as follows: a refresh might be going on when PathChildrenCache.close() is called. The refresh runs on a background thread, the ZK event thread if I'm not mistaken. Since the processResult will be running within a synchronized block, the PathChildrenCache.close() method will not be able to return until the processResult is finished, since it tries to acquire the same lock.

The second synchronized block in refresh(), around the statements "if-closed-return, getChildren()..." is for similar reasons: the if-closed in that block might be called before the closed state is set, while the getChildren might be launched afterwards, but by then zookeeper might already be closed as well. By putting it in a synchronized block, we are sure no ZooKeeper operation is going on after returning from the close() method, and CuratorFramework/ZooKeeper can be closed without causing errors to be logged.