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
Can you see where this is actually called from?  If I understand correctly, `BasicInvocationFuture`s are non-cancellable meaning the implementation here to always return `false` is valid according to the contract.

I can't seem to hit this breakpoint when testing locally.