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
For posterity: This approach actually doesn't change anything.

What this accomplishes is that the stack trace is not filled in _by the constructor_. However, `Throwable.writeObject` defeats this during serialization by explicitly calling `getOurStackTrace()` (which is `private`, so we can't suppress it like this). If `Throwable.stackTrace == UNASSIGNED_STACK`, which is the default value for the field, `getOurStackTrace` fills it in.

On net, then, all this change does is move the cost of generating the stack trace from construction time to serialization time, but the net payload doesn't change.

To _really_ do this, the correct approach is to modify the `HazelcastException` hierarchy to expose access to the `protected RuntimeException(String, Throwable, boolean, boolean)` constructor. _Then_ derived exceptions could pass `writableStackTrace = false` to that constructor, which would prevent the constructor from filling in the stack trace and _also_ prevent `writeObject` from doing it as well.