'Creates a new (unconfigured) object, returning an object
handle that can be used with modify_* methods and then finally
save_* methods.  The handle only exists in memory until saved.
"what" specifies the type of object:
distro, profile, system, repo, or image'

def new_item(self, what, token, is_subobject=False):

    self._log(('new_item(%s)' % what), token=token)
    self.check_access(token, ('new_%s' % what))
    if (what == 'distro'):
        d = item_distro.Distro(self.api._collection_mgr, is_subobject=is_subobject)
    elif (what == 'profile'):
        d = item_profile.Profile(self.api._collection_mgr, is_subobject=is_subobject)
    elif (what == 'system'):
        d = item_system.System(self.api._collection_mgr, is_subobject=is_subobject)
    elif (what == 'repo'):
        d = item_repo.Repo(self.api._collection_mgr, is_subobject=is_subobject)
    elif (what == 'image'):
        d = item_image.Image(self.api._collection_mgr, is_subobject=is_subobject)
    elif (what == 'mgmtclass'):
        d = item_mgmtclass.Mgmtclass(self.api._collection_mgr, is_subobject=is_subobject)
    elif (what == 'package'):
        d = item_package.Package(self.api._collection_mgr, is_subobject=is_subobject)
    elif (what == 'file'):
        d = item_file.File(self.api._collection_mgr, is_subobject=is_subobject)
    else:
        raise CX(('internal    error,    collection    name    is    %s' % what))
    key = ('___NEW___%s::%s' % (what, self.__get_random(25)))
    self.object_cache[key] = (time.time(), d)
    return key
