'yield (key, value) stored in this and the descendant nodes
:param node: node in form of list, or BLANK_NODE
.. note::
Here key is in full form, rather than key of the individual node'

def _iter_branch(self, node):

    if (node == BLANK_NODE):
        raise StopIteration
    node_type = self._get_node_type(node)
    if is_key_value_type(node_type):
        nibbles = without_terminator(unpack_to_nibbles(node[0]))
        key = '+'.join([to_string(x) for x in nibbles])
        if (node_type == NODE_TYPE_EXTENSION):
            sub_tree = self._iter_branch(self._decode_to_node(node[1]))
        else:
            sub_tree = [(to_string(NIBBLE_TERMINATOR), node[1])]
        for (sub_key, sub_value) in sub_tree:
            full_key = ((key + '+') + sub_key).strip('+')
            (yield (full_key, sub_value))
    elif (node_type == NODE_TYPE_BRANCH):
        for i in range(16):
            sub_tree = self._iter_branch(self._decode_to_node(node[i]))
            for (sub_key, sub_value) in sub_tree:
                full_key = ((str_to_bytes(str(i)) + '+') + sub_key).strip('+')
                (yield (full_key, sub_value))
        if node[16]:
            (yield (to_string(NIBBLE_TERMINATOR), node[(-1)]))
