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
But might this not return `true` sometimes even though the remote operation is running and not successfully cancelled?

I'm not sure we would want to encourage consumers of Hazelcast to `cancel` these `Future`s.  Implementing the semantics according to the strict contract (I'm reading from https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html#cancel(boolean)) could be a lot of work.