Destroy the service, if possible, including its persistent storage.
This method should (in effect) spawn a separate thread to do the
actual work asynchronously, and make a reasonable attempt to let
this remote call return successfully. As such, a successful return
from this method does not mean that the service has been destroyed.
Although the service should make a reasonable attempt to let this
remote call return successfully, the service must not wait
indefinitely for other (in-progress and subsequent) remote calls to
finish before proceeding to destroy itself. Once this method has been
called, the service can, but need not, reject all other (in-progress
and subsequent) remote calls to the service.