Added the OCOPY() macro.
Added peek_le64().
Simplified dmesh_fill_alternate() and dmesh_alternate_location().

Instead of using a complex random selection logic from an array, use shuffle()
and then pick the items from the beginning of the array.
Documented str_foreign() parameters.
Semi-reliable UDP TX: only send last fragment of large message to unknown hosts.

When the host has not been flagged as sending us ACKs recently, we only send
the last fragment (the shortest one) to the host, waiting for it to be ACK-ed
before transmitting the others.
ut_got_ack(): make sure remote side is ACK-ing sent fragments only.
ut_got_ack(): also check for sent fragments in cumulative / extended ACKs.
ut_got_ack(): make sure all the log messages include the protocol tag.
bstr_trailing_error(): did not flag stream as non-OK on trailing bytes present.
RX inflater now gives offset in stream where decompression failed.

Also, when the decompression error happens immediately (at offset 0), dump
the first 16 bytes in hexadecimal along with the error message.
xfmt_tree_dump_extended(): fixed wrong returned value (inverted logic).
Added a generic tokenizer in the library, abstracted from our XML parser.
Switched XML parser and UPnP layer to our new generic tokenizer.
Switched magnet parsing to the generic tokenizer.
Initial state for the G2 implementation, with code dating September 2012.
Plug linking with the G2 library.
Fixed comment typo.
hcache_find_nearby(): was missing a "break" in the case for HOST_GUESS.
Added support for G2 hub host caching, along with its GUI interface.
QRP routing logic now uses LimeWire's logic, less strict than the old GTKG one.

We used to require that ALL words in a query match an entry in the QRP to
let the query pass the Bloom filter.

But LimeWire has always used a different logic: if there are more than 2 words,
then only 2/3rd of the words are required to match to let the query pass.

This means leaf nodes will get more queries than before, but at the same time
it lets queries pass that COULD match at the leaf level if the servent there
does not require that ALL the words in the query be present to return a hit.

In any case, all the other Gnutella servents out there are likely to follow
that LimeWire logic, so it is best to be compatible with them.