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
Good find!  I might suggest even lower, like 5 to 10.