SIP-14 improvements

Add missing canonical combinators:
  `def transform[S](f: Try[T] => Try[S])(implicit executor: ExecutionContext): Future[S]`
  `def transformWith[S](f: Try[T] => Future[S])(implicit executor: ExecutionContext): Future[S]`
  `def flatten[S](implicit ev: T <:< Future[S]): Future[S]`

Add missing utilities:
  `val unit: Future[Unit]` in `object Future`
  `val never: Future[Nothing]` in `object Future`

Refactors:
  the scala.concurrent.Future trait to not explicit create any Promises,
  so that implementations can control implementation type,
  this is mainly facilitated through adding of the `transform` and `transformWith` methods.
  the implementation of ExecutionContextImpl has been cleaned up

Securing:
  Add a self-check in completeWith and tryCompleteWith to avoid cycles in trait Promise
  Capping the maximum number of Threads for the global ExecutionContext to the max parallelism
  Implementing (almost) all `Future` combinators on `transformWith` and `transform` means
  that DefaultPromise linking works on both (flat)map and recover(With)

Removes:
  the private internalExecutor method in favor of an import in trait Future
  the private internalExecutor method in favor of an import in trait Promise
  the AtomicReferenceFieldUpdater in AbstractPromise since we're using Unsafe
  scala.concurrent.impl.Future is no longer needed

Deprecates:
  Future.onSuccess - discourage the use of callbacks
                     (and is also redundant considering `foreach` and `onComplete`)
  Future.onFailure - discourage the use of callbacks
                     (and is also redundant considering `onComplete` and `failed.foreach`)
  ExecutionContext.prepare - it was ill specced and it is too easy to forget to call it
                     (or even know when to call it or call it more times than needed)

Reimplements:
  failed - in terms of `transform`
  map - in terms of `transform`
  flatMap - in terms of `transformWith`
  recover - in terms of `transform`
  recoverWith - in terms of `transformWith`
  zip - in terms of `flatMap` + `map`
  fallbackTo - in terms of `recoverWith` + `recoverWith`
  andThen - in terms of `transform`

  Documentation:
    Almost all methods on Future and Promise have been revisited and had their ScalaDoc updated

  Tests:
      Yes
thanks for taking the time to explain! ;)

I made further tests today. It does not work as expected.
See my current version here:
https://gist.github.com/yanns/ac7eb02ac153ab92e2b6

To test the code:
```scala
object ServiceDoc extends Controller {

  def test() = Action.async {
    val ws = WS.client(current)
    Logger.warn("sync")

    ws.url("...").get().map { response =>
      Logger.warn("async")
      Ok(response.body)
    }
  }
}
```

The MDC context contains one ID to trace one request. This ID is new for each new request and is set in a Play filter.

The first Future.map propagates the MDC context as expected:
```
08:48:27.992 [warn] application - sync ef9ff7f0-52a4-11e4-9783-56847afe9799
08:48:28.115 [info] d.d.e.l.p.a.MDCPropagatingDispatcher - new id = ef9ff7f0-52a4-11e4-9783-56847afe9799 
08:48:28.115 [info] d.d.e.l.p.a.MDCPropagatingDispatcher - new oldId = null - -
08:48:28.116 [warn] application - async ef9ff7f0-52a4-11e4-9783-56847afe9799
```
The second call to the same code sets the old MDC context in `map` and not the new one:
```
08:48:34.269 [info] d.d.e.l.p.a.MDCPropagatingDispatcher - new oldId = null - -
08:48:34.269 [info] d.d.e.l.p.a.MDCPropagatingDispatcher - new id = f3943c90-52a4-11e4-9783-56847afe9799 
08:48:34.270 [warn] application - sync f3943c90-52a4-11e4-9783-56847afe9799
08:48:34.271 [info] d.d.e.l.p.a.MDCPropagatingDispatcher - new oldId = null - -
08:48:34.276 [info] d.d.e.l.p.a.MDCPropagatingDispatcher - new id = ef9ff7f0-52a4-11e4-9783-56847afe9799 
08:48:34.276 [info] d.d.e.l.p.a.MDCPropagatingDispatcher - new oldId = null - -
08:48:34.277 [warn] application - async ef9ff7f0-52a4-11e4-9783-56847afe9799
```
I would have expected `async f3943c90-52a4-11e4-9783-56847afe9799`