Hazelcast-2829: Use a single thread executorService to run heartbeat task.

The Hazelcast server creates a new CallContext object for every calling
thread that performs an operation. Because the ConnectionManager uses a
new thread for every heartbeat execution (every 6-10 seconds), this
results is a memory leak of CallContext objects on the server. Instead,
use a single thread executor service to run the heartbeat check. Since
this check is only performed if the last response was not within the
timeout, it is safe to use a single thread.

(Only the code change in ConnectionManager.java is needed)

More information:
https://github.com/hazelcast/hazelcast/issues/2829