Improve the lifecycle of BasicInvocation and BasicInvocationFuture

* Add cancellation support to BasicInvocationFuture
* Check the state of the BasicInvocationFuture before retrying BasicInvocation
* Remove invokeCount decrement on retries
* Decrease retry count to 50 retries by default. Ignoring serialization costs this will
  make a client wait for 20 seconds before bailing (10 quick retries then 40 500ms retries)
* Improve the serialization of CallTimeoutException
(like)