Please don't send the packet for unwatched changes

updateContentListener is called for every recieved item.
overloads caused by lots of 1 item shouldn't lag

destination is now a hashmap by itemIdentifier, storing a list of all
items flowing by that id.

this means we don't need to search the list for each item.

also, if this list is empty, don't bother checking to see if each item
is in it.

slight increase in the cost of single items flowing, creating then
destroying individual almost empty lists.

massive decrease in cost of an overloaded connection.