Split read based timeouts.

A Nifty client actually has to deal with two separate timeouts:

- request timeout - the maximum amount of time that the caller is willing to wait
  for an I/O request to complete
- receive timeout - the maximum amount of time that the client is willing for the
  server to make any progress

These times can be very different. e.g. a server might trickle a request sending a
packet every three seconds for a long time and the caller is willing to wait minutes
for a request to complete as long as it makes progress.

This patch fixes the name confusion around read, request and receive timeouts in the
nifty client code, uses consistent naming everywhere and adds a new timeout (requestTimeout)
while the existing receiveTimeout now does what the name suggests.

Existing code should still work fine as both timeouts are set to the same value by default.