bug22596: Send 408 response on timeouts. Allow retries.

Have Allegroserve send a '408 Request Timeout' response when a
timeout occurs while processing a request, rather than just closing
the connection. A connection may still be closed when no part of a
request has been read by the server.

Add a :retry-on-timeout argument to do-http-request (default: nil) for
automatic retrying of timed out requests. In the fashion of the
:redirect argument, it can be passed t, nil, or a positive integer in
order to always retry, never retry, or retry n times before giving up
and returning the response to the calling agent.

<release-notes>
bug22596: Send a 408 response when reading request times out.

Previously, Allegroserver would respond with a 500 Server Error
or simply close the connection if a timeout occurred while reading
an incoming request. Now, a 408 Request Timeout is returned if
any portion of the request has been read. If none of the request
has been read when the timeout occurs, such as when a keep-alive
connection goes unused, the connection will just be closed.
</release-notes>

<documentation>
Add a :retry-on-timeout entry to the table describing the keyword args
accepted by do-http-request.

name: retry-on-timeout
default: nil
description: If the response is a timeout (code 408), then if this
argument is true (and, if an integer, positive), do-http-request will
call itself to retry the request.  If retry-on-timeout is an integer
then in the recursive call the value passed for redirect will be one
less than the current value.  This prevents infinite recursion due to
redirection loops.

</documentation>

Change-Id: I17fc015c08f67f09c974a0d2d4e54fb17c1a5dbd