code: public static Package newInstance(Package aPackage) {
      Package packageCopy = new Package(aPackage.getEntityType());
      packageCopy.setId(aPackage.getId());
      packageCopy.setLabel(aPackage.getLabel());
      packageCopy.setDescription(aPackage.getDescription());
      Package parent = aPackage.getParent();
      packageCopy.setParent(parent != null ? Package.newInstance(parent) : null);
      Iterable<Tag> tags = aPackage.getTags();
      packageCopy.setTags(stream(tags).map(Tag::newInstance).collect(toList()));
      return packageCopy;
    }
docs: Copy-factory (instead of copy-constructor to avoid accidental method overloading to {@link
  #Package(EntityType)})
  
  @param aPackage package
  @return deep copy of package