Shutdown channel factory if we created it
Fix test race condition

When finding an available port by binding a temporary ServerSocket to port 0, and then later using that port, the port might have been consumed by another test. Instead, tests should just bind the nifty server directly to port 0 and get the actual port it was bound to using getServerChannel after starting the server, and looking up the actual locally bound address.
Factor out more netty configuration specifics into the config builders

This change mainly adds control over number of boss and worker threads for the Netty channel factories used by the Netty client and server thread pools.

It also renames NettyConfigBuilder to NettyServerConfigBuilder (to contrast with NettyClientConfigBuilder), and turns the config builders into actual builders (they were just used directly before).
Add adapters to adapt NiftyProcessors back to TProcessors
Fix a NullPointerException in client channel

Not sure how we haven't hit this before, but this is a fix to a bug which can lead to NPE when trying to cancel the timeout on a failed client call.
Enable TCP_NODELAY

Turn these on by defaults to match the defaults in apache thrift
Upgrade to airlift 0.78-SNAPSHOT
Enable reuse of TChannelBufferInput/OutputTransport
Move to 0.78 airlift release
[maven-release-plugin] prepare release nifty-parent-0.8.0
[maven-release-plugin] prepare for next development iteration
Move to facebook-oss-pom v6
Catch more exceptions in async client code

Some experimenting with the load generator and also a bug report from Martin indicated that there were cases where exceptions were getting thrown in async client handlers that were not caught, and could prevent us from ever firing either the success or failure callbacks for a client call. This diff tries to catch all of those cases, to guarantee we'll fire one of the callbacks.
Improve exception handling for NiftyClient connections

- Translate all exceptions to TTransportException
- Catch any exceptions in the ChannelFutureListener to make sure we always set a value or exception on the ListenableFuture
- Catch failure of cancel() call in the ChannelFutureListener to make sure we *always* set a value or exception on the ListenableFuture
Upgrade to facebook-oss-pom v7
Change NiftyProcessor.process() interface method to return a ListenableFuture

This is to support asynchronous processors (soon to be added to swift). The processor should return a ListenableFuture<Boolean> instead of a boolean, and set that future when the return value is ready.

Processors which are not going to do asynchronous processing (e.g. processors generated by standard thrift compiler) should just use Futures.immediateFuture() to construct their return values. The NiftyProcessorAdapters utility class will handle this automatically for processors deriving from the standard thrift TProcessor interface.
Remove unnecessary cast
Make default netty server timer run on a daemon thread

No reason for the timer thread to keep the server alive...
Display auto-assigned port

Move the starting message behind the actual start (and change the wording). Report
the port that an auto-port-assigned service bound to.
Rename 'speaks' config to 'protocol'