Could merge `finish`/`fail` into a single method: `complete`:

````
def complete(result: Try[Iteratee[Array[Byte], A]]) {
  val resultWasCompleted = bodyHandlerResult.tryComplete(e)
  if (!resultWasCompleted && ctx.getChannel.isOpen) ctx.getChannel.setReadable(true)
  itPromise.complete(e)
}
````