Connection failure listener (fixes #32)

This change introduces the `FailedConnectionListener` interface. Applications using Pushy can register connection failure listeners to watch for connection failures that are unlikely to be resolved by future reconnection attempts (i.e. `SSLHandshakeException`s) and respond accordingly. There are a couple other changes rolled up in here, too:

1. Add a `PushManager` argument for rejected notification listeners, so listeners associated with multiple push managers can tell which one had the rejection.
2. Made the push manager's listener `ExecutorService` externally-configurable; failed connection listeners and rejected notification listeners will be called by tasks from that service.