Collapsed the various ApnsConnection handlers into a single class.
Handle business logic asynchronously.
Revert "Revert "Made "wait for something to send" behavior more sensible/efficient.""

This reverts commit ee3f4119fd395f907e4bdf872c4bd1ada4375d19.
Removed an unnecessary optimization and fixed some wacky connection shutdown behavior. Added a test to cover the potentially-bogus shutdown behavior.
Merge branch 'threadless_connections' of github.com:relayrides/pushy into connection_failure_listener
Removed an unnecessary call to channel.read.
Clarified behavior for calls to shutdown methods while already shutting down or not connected. Added tests for clarified behavior.
Use an ArrayDeque instead of a LinkedList for the sent notification buffer.
Dropped a commented-out line.
Track the number of outstanding write attempts. Nothing actually uses this functionality yet.
Made "wait for things to finish" method more comprehensive. Added tests.
Moved "wait for finish" logic out of the connection pool and into the PushManager.
Merge branch 'threadless_connections' of github.com:relayrides/pushy into connection_failure_listener

Conflicts:
	src/main/java/com/relayrides/pushy/apns/PushManager.java