ReadTimeoutHandler IdleStateHandler fires after handler destroyed

Motivation:
The ReadTimeoutHandler and IdleStateHandler read timeout event does not check if the handler is destroyed before a timeout event is dispatched.  This can lead to timeout events being dispatched at incorrect times and scheduling events longer than necessary.

Modifications:
-IdleStateHandler to check if handler is destroyed before dispatching another event and scheduling a new task
-ReadStateHandler needs to same changes

Result:
IdleStateHandler and ReadStateHandler clean up is more correct.