Notify packet sending listeners in new thread

sendListeners are now invoked *after* the packet has been put on the
wire.

Also sending listener exceptions are not catched and not only
NotConnectedExceptions. And a exception does not cause a 'break' but a
'continue' now. Log level is WARNING now.
Store packet extensions in a HashMap

allowing O(1) lookups for PacketExtensions

The one EntityCapsManagerTest becomes obsolete with this change, as
duplicate extension elements (RFC 6120 § 8.4) are now no longer possible
after the stanza has been parsed (they still may be received on the
wire, but only the last duplicate will be added).
Make fields in Packet and Message final
Remove hashCode/equals from Message and Packet

Those where never correctly implemented and are not really used. If you
want to compare Packets, compare their toXML() result.

N.B. that we keep hashCode/equals for Message.(Subject|Body) because
those are correct and are in-use ('bodies' and 'subjects' are Sets in
Message).
Add XMPPTCPConnection.sendSMAcknowledgement
Send a final SM Ack on shutdown()
Handle spurious interrupts in XMPPTCPConnection

Also remove unnecessary done() check in nextStreamElement() and remove
wrong comment in !instantShutdown branch. There is no mechanism to
forcible close the socket.
Add Stream Management javadoc

- rename idStanzaAcknowledged to stanzaIdAcknowledged
- introduce smWasEnabledAtLeastOnce and throw
  StreamManagementNotEnabledExceptions
- enable SM is SM resumption is enabled
Asynchronous invoke Stanza Acknowledged Listeners
Improve Packet javadoc
Invoke PacketCollectors in ListenerNotification

Also make executorService a non-ScheduledExecutorService. This was an
artifact from times where executorService as used to schedule
Runnables. But now it's just used to queue the receive packets in
Runnables and call the packet collectors and listeners.
Add support for XEP-335: JSON Containers

and GCM JSON payloads for Google's GCM Cloud Connection Server.
Include the full content in UnparsedResultIQ

In order to prevent

<iq to='...' from='...' type='result' id='1'>
  <mynode xmlns='my:namespace' myattr='...'>
    <somenode\>
  </mynode>
</iq>

showing up as UnparsedResultIQ like this:

<iq to='...' from='...' type='result' id='1'>
  <somenode\>
</iq>
Use switch/case in 'IQ parse(XmlPullParser)'
Added javadoc about extended content to PacketExtension
Refactor Bind and Roster IQ parsing code into providers
Merge invokePacketCollectors() and notifiyReceivedListeners()

into invokePacketCollectorsAndNotifyRecvListeners()
Add missing GCM namespace in experimental.providers
Validate ProviderManager arguments
Undeprecate Packet.getExtension(String)

as there a valid uses for it, see for example ChatStateManager:173.