Stop/cancel timer when request completes in AsyncServiceClient

AsyncServiceClient starts a timer to handle web request timeouts. This
timer was not being closed when a request completed before the timeout
period.

Under heavy usage you can easily have thousands of Timer objects active
in memory that won't dispose until the timeout period is over. Easy to
cause out of memory exceptions especially when requesting large amounts
of data because the data returned from the server is in memory until the
timer finishes.

Add a StopTimer() method that gets called in HandleSuccess and
HandleError that will stop the timer when we no longer need it.