Use separate exceptions for open_timeout, timeout

Explicitly track which state we're in with a given connection so that
we know whether we've successfully established the TCP connection.

For timeouts occurring before we enter the body of the Net::HTTP#start
block, assume the request failed establishing the connection, and
raise the new RestClient::ConnectTimeout exception (which, for
compatibility, is a subclass of RestClient::RequestTimeout).

Unfortunately, this is a bit difficult to test without taking
advantage of actual network latency - it seems impossible to force
Linux to delay SYN/ACKing an incoming connection (even if you don't
accept() it and you have listen() backlog set to 0). However, testing
with a sufficiently low open_timeout and a sufficiently distant server
seems to work.

Conflicts:
    lib/restclient/request.rb
Rework timeouts to differentiate HTTP 408.

Previously, rest-client would raise RestClient::RequestTimeout both when
successfully receiving an HTTP 408 response from the server and when
hitting connection timeouts upon receiving no response from the server.

It is important to be able to distinguish these cases, so we break
compatibility to start introducing a new exception hierarchy. RestClient
will continue to raise RestClient::RequestTimeout for HTTP 408
responses.

There is a new RestClient::Exceptions::Timeout class, which inherits
from RestClient::Exception, and this is the base for two new exceptions:
RestClient::Exceptions::OpenTimeout and
RestClient::Exceptions::ReadTimeout.

These new exceptions mirror the Net::OpenTimeout and Net::ReadTimeout
classes introduced in Ruby 2.0, and they work even in Ruby 1.9.3. All of
these exceptions also store the original wrapped exception, which is now
accessible at `#original_exception`.

Fixes: #337