Remove redundant code from abstract class.

AbstractApnsService had a lot of redundant code in it.  I consolidated the core functions in a couple of methods and then had the other API methods with variant parameterizations call these rather than duplicating the implementations.  The results seem much cleaner and easier to follow.  I also expanded the API slightly to make specifying the expiry as a Date available as a variant of the methods with byte[] parameters and specifying the expiry as a Unix time available as a variant of the methods with String parameters.