Fix test breaks from my last change

Some callers actually wanted to create a transport around a ChannelBuffer in order to traverse through the data in the buffer and figure out how many bytes were read. If the buffer is duplicated internally, they can't check how many bytes were read without providing access to the duplicated buffer. In the end I decided to switch things back to how they were, and the code that actually *did* want the buffer duplicated (to do some pre-processing of the message before sending it to the actual processor) will do so explicitly.
Add handling for RejectedExecutionException

Send a TApplicationException response (and don't process the request) when the server is configured with an executor that has a limited-size queue, and a request arrives but the queue is full.
Support task timeout
Add NiftyClientRequestContext for client side request context processing
Factor out RequestChannel interface (to support channels not based on netty)
Pass client config to channel connector methods

Header connector will use this to get the netty timer to use for
authentication calls
Pass config objects to security factories

Make the client/server configs accessible respectively to the
client/server security factories. The primary use for this currently
will be for the security factories to get the shared timer which will
can be used for security-related timeouts.
Move TInputOutputCompositeTransport to core

Moving this here from header protocol code, where I will use it to maintain
a single pair of protocols/transports for the lifetime of a client
connection (instead of creating a new protocol/transport pair for each request).
Reuse protocol/transport pair for client conns

Switch from creating a new protocol/transport pair for every new client
requests, to creating a new one for every client connection.