'update item inside a node
:param node: node in form of list, or BLANK_NODE
:param key: nibble list without terminator
.. note:: key may be []
:return: new node
if this node is changed to a new node, it\'s parent will take the
responsibility to *store* the new node storage, and delete the old
node storage'

def _delete(self, node, key):

    node_type = self._get_node_type(node)
    if (node_type == NODE_TYPE_BLANK):
        return BLANK_NODE
    if (node_type == NODE_TYPE_BRANCH):
        return self._delete_branch_node(node, key)
    if is_key_value_type(node_type):
        return self._delete_kv_node(node, key)
