Riakfuture redesign

This changes our RiakFuture in the core to be much like a Netty future.

The big win is rather than just throwing exceptions, it indicates that the operation failed and the new `FailureInfo` class encapsulates the exception thrown, as well as identifying information about the query. This makes the `RiakFutureListener` far more complete/useful as you don't just get an exception - the `FailureInfo` contains identifying information about the operation (usually a `Location`).