code: private Node removeNodeRecursively(final NodeImpl node, final ArchivePath path) {
          final NodeImpl parentNode = content.get(path.getParent());
          if (parentNode != null) {
              parentNode.removeChild(node);
          }
  
          // Remove from nested archives if present
          nestedArchives.remove(path);
  
          // Recursively delete children if present
          if (node.getChildren() != null) {
              final Set<Node> children = node.getChildren();
  
              // can't remove from collection inside of the iteration
              final Set<Node> childrenCopy = new HashSet<Node>(children);
              for (Node child : childrenCopy) {
                  node.removeChild(child);
                  content.remove(child.getPath());
              }
          }
          return content.remove(path);
      }
docs: Removes the specified node and its associated children from the contents
  of this archive.
  
  @param node the node to remove recursively
  @param path the path denoting the specified node
  @return the removed node itself