#183 Upgraded to Java Chronicle 2.0.2 as 2.0.1 had a bug.
Upgrade Netty to 4.0.10
Added a random option to generating UUIDs based on recent work done in Spring Messaging to generate message ids. Also added a horserace test to make sure that time-based UUID generation isn't any slower than random generation.
Added helper methods to Promises and Streams to make it more succinct to create Deferreds.

In code, it's common to need to create lots of Promises using a standard pattern:

    Deferred<T, Promise<T>> deferred = Promises.<T>defer().env(env).dispatcher(dispatcher).get();

It's a little less code noise to condense that down into:

    Deferred<T, Promise<T>> deferred = Promises.<T>defer(env, dispatcher);

    ...or even...

    Deferred<T, Promise<T>> deferred = Promises.<T>defer(env);

The problem is most noticable when expanding the T to real types, particularly if those types are also generic. That means you have multiple nested generics signatures just for the deferred, with the T repeated, which gets messy pretty quickly. Anything we can do to cut down on the noise is a Good Thing.
Simplify state and locking of Promise and Composable

This commit addresses the problems detailed in issue #191. It removes
Promise's monitor, and, instead, uses the ReentrantLock from its
superclass, Composable.

The use of hasBlockers has been moved so that it's always read and
written when locked. This should eliminate the possibility of
notifications being missed.

Fields that are always accessed under a lock are no longer declared
volatile.
Merge pull request #192 from wilkinsona/promise-locking

Simplify state and locking of Promise and Composable
Added a sendAndReceive method to TcpConnection.

The purpose of sendAndReceive is to make the common use case of a single connection needing to wait for a response or an error from the peer when sending a message. This method internally creates a Deferred<IN, Promise<IN>> and places it on an internal response Queue, after which it sends the outgoing data. When a response is received from the peer or an exception is reported, a Deferred is popped off the Queue and completed with the value or the exception. It assumes a single thread is using the connection and that responses are received 1-for-1 with requests and that each request will receive a single response or error.

This method won't work for instances when the response is split over multiple messages, as is the case with the Netty HTTP support, which sends responses in a response then content object.
Merge remote-tracking branch 'upstream/master'

Conflicts:
	build.gradle
fix conflict