Make Roster.hasValidSubscriptionType() static
Introduced unchangedEntries in Roster logic

If the connection has been reconnected, then we will receive entries
that have been unchanged since the last time we received a roster
result. Without this change, those entries ended up in 'toDelete' and
got deleted.

This change also inlines some roster methods.
Shutdown listenerExecutor to prevent the Thread from leaking

listenerExecutor needs to get shutdown once it is no longer required.

SMACK-567
Re-use executorService as listenerExecutor
Make XMPPConnection.schedule() protected

This method was never intended to be part of the public API. It's also
critical that the given Runnables complete within a reasonable
time frame so that they don't block following ones.
Don't throw an IOException if IBBStream got closed by the remote

Smack should not throw an IOException in case a stream got closed by
the remote peer and the user is trying to read() from the stream. This
commit fixes that, by making Smack return '-1' if the stream got
closed by the remote. An IOException will only be thrown if the user
tries to read from a stream that got already closed by *himself*.

SMACK-468
Smack 4.0.0-rc2