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
This is merely a fix for the lifecycle of `BasicInvocationFuture`. Hazelcast never cancels its futured. However consumers of Hazelcast can call `cancel` on `Future`s returned from async methods. This just fixes that.