def consume_item_lazy(rlp, start)
      t, l, s = consume_length_prefix(rlp, start)
      if t == :str
        consume_payload(rlp, s, :str, l)
      elsif t == :list
        [LazyList.new(rlp, s, s+l), s+l]
      else
        raise "Invalid item type: #{t}"
      end
    end
def consume_item_lazy(rlp, start)
      t, l, s = consume_length_prefix(rlp, start)
      if t == :str
        consume_payload(rlp, s, :str, l)
      elsif t == :list
        [LazyList.new(rlp, s, s+l), s+l]
      else
        raise "Invalid item type: #{t}"
      end
    end
Read an item from an RLP string lazily.

 If the length prefix announces a string, the string is read; if it
 announces a list, a {LazyList} is created.

 @param rlp [String] the rlp string to read from
 @param start [Integer] the position at which to start reading

 @return [Array] A pair `[item, next_start]` where `item` is the read
   string or a {LazyList} and `next_start` is the position of the first
   unprocessed byte