DONT MERGE: Removal of response queue

The response-queue is a shared concurrent data-structure that is shared between the response-thread and the IO-threads and can cause contention/scalability problems. So instead of
* IO-thread send response-packet to response queue
* response-thread takes response-packet takes response packet from response-queue, deserialized to response-object and notifies the invocation with that response object. 

You get a
* IO-thread notifies the invocation directly with the response-packet. 

Advantages:
* Less contention and potentially better performance/scalability
* Removing of (de)serialization of the response objects
* Reduced gc pressure: at least 2 object is removed for every invocation (the response object created on the invoked side, and the deserialized response object on the invoking side)
* Potentially reduces latency because a queue-handover step is removed from the picture.
* 1 thread less fighting for resources.

The response can be enabled through configuration. Once we are happy with lack of a response queue, we'll remove the response-queue/response-thread from the design completely.

Most of the work is getting rid of the response objects; the issue is that for the removal of the response queue you don't want the IO-threads do the deserialization of the response objects. So the response objects have been completely removed and the IO-thread can decide what do do (e.g. call the invocation and tell that a response is available) without any form of deserialization based on the packet content.

Skipping the deserialization is done by encoding additional data within the packet (e.g. callid) that can be accessed without deserialization. 

This PR relies on a few PR's to be merged first:
* https://github.com/hazelcast/hazelcast/pull/4094 packet cleanup; else encoding additional data in packet is complicated.
* https://github.com/hazelcast/hazelcast/pull/4095 removal of remotecallkey changes the structure of the scheduler/operation-service

So these PR's need to be merged first.

This PR is not ready yet to be merged. There is some cleanup remaining and some issues to be resolved. E.g. not deserializing a remote exception on the IO-thread.
You misunderstood me, I don't mean to send/force a response object. What I
say is, there's no need for these methods exposed in SPI. These are
completely internal. Backup and timeout responses can be handled by
operation service.

~Sent from mobile