NACK packets are not sent to nodes with unprocessed packets; re-sent packets will be counted towards PPS

NACK packets are not sent to nodes with unprocessed packets:

Cause: A NACK packet may contain sequence numbers of late packets that have arrived but haven't been processed, in which case they do NOT need to be re-sent.

Fix: A QHash was added to base class ReceivedPacketProcessor that keeps track of how many received packets are waiting to be processed from each sending node.  This is used by sendNack() so that NACKs are only sent to nodes that have no packets waiting in the client's receive-buffer.

Testing: None yet, but from looking at octree packet statistics, the client doesn't seem to receive any duplicate packets.



Re-sent packets will be counted towards PPS:

Cause: OctreeSendThread's resendNackedPackets() did not count the re-sent packets towards the PPS, which means more packets are sent per time unit than desired by the client or server may be sent.

Fix: resendNackedPackets() was moved into PacketDistributor() so those packets could also be counted towards the PPS as well as other stats.

Testing: None yet.




Also changed VoxelPacketProcessor to OctreePacketProcessor and changed the _destinationNode field of NetworkPacket to _sendingNode to match their actual purposes.  Related identifiers (getters and setters) were updated to reflect this change.
I don't see any garbage collection on _nodePacketCounts.  So a very long session connection with Nodes that fall constantly fall silent and then restart with a new QUuid will accumulate dead entries in the Hash.  While the QHash can probably get quite big before it causes problems this leakage will probably eventually bite us (*) and provides an attack mode from malevolent external parties.

This is a good place to check for entries that should be removed (zero packet counts) although it is not clear (to me) that this code would be hit for Nodes that have already been removed from the active Node list, so maybe corresponding entries in _nodePacketCounts should be removed when the Nodes are retired.

(*) We recently had a situation where a Windows interface client would not successfully connect and would generate a new Node UUID every three seconds or so at the DomainServer.  We will probably inflict such a connection request storm on ourselves again someday.