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
I use `prepare` in custom akka `Dispatcher`, for example to propagate the SLF4J MDC in Play!:
```scala
package monitoring

import java.util.concurrent.TimeUnit

import akka.dispatch._
import com.typesafe.config.Config
import org.slf4j.MDC

import scala.concurrent.ExecutionContext
import scala.concurrent.duration.{Duration, FiniteDuration}

/**
 * Configurator for a MDC propagating dispatcher.
 *
 * To use it, configure play like this:
 * {{{
 * play {
 *   akka {
 *     actor {
 *       default-dispatcher = {
 *         type = "monitoring.MDCPropagatingDispatcherConfigurator"
 *       }
 *     }
 *   }
 * }
 * }}}
 *
 * Credits to James Roper for the [[https://github.com/jroper/thread-local-context-propagation/ initial implementation]]
 */
class MDCPropagatingDispatcherConfigurator(config: Config, prerequisites: DispatcherPrerequisites)
  extends MessageDispatcherConfigurator(config, prerequisites) {

  private val instance = new MDCPropagatingDispatcher(
    this,
    config.getString("id"),
    config.getInt("throughput"),
    FiniteDuration(config.getDuration("throughput-deadline-time", TimeUnit.NANOSECONDS), TimeUnit.NANOSECONDS),
    configureExecutor(),
    FiniteDuration(config.getDuration("shutdown-timeout", TimeUnit.MILLISECONDS), TimeUnit.MILLISECONDS))

  override def dispatcher(): MessageDispatcher = instance
}

/**
 * A MDC propagating dispatcher.
 *
 * This dispatcher propagates the MDC current request context if it's set when it's executed.
 */
class MDCPropagatingDispatcher(_configurator: MessageDispatcherConfigurator,
                               id: String,
                               throughput: Int,
                               throughputDeadlineTime: Duration,
                               executorServiceFactoryProvider: ExecutorServiceFactoryProvider,
                               shutdownTimeout: FiniteDuration)
  extends Dispatcher(_configurator, id, throughput, throughputDeadlineTime, executorServiceFactoryProvider, shutdownTimeout ) {

  self =>

  override def prepare(): ExecutionContext = new ExecutionContext {
    // capture the MDC
    val mdcContext = MDC.getCopyOfContextMap

    def execute(r: Runnable) = self.execute(new Runnable {
      def run() = {
        // backup the callee MDC context
        val oldMDCContext = MDC.getCopyOfContextMap

        // Run the runnable with the captured context
        setContextMap(mdcContext)
        try {
          r.run()
        } finally {
          // restore the callee MDC context
          setContextMap(oldMDCContext)
        }
      }
    })
    def reportFailure(t: Throwable) = self.reportFailure(t)
  }

  private[this] def setContextMap(context: java.util.Map[String, String]) {
    if (context == null) {
      MDC.clear()
    } else {
      MDC.setContextMap(context)
    }
  }

}
```

The `prepare` of `Dispatcher` comes from `ExecutionContext.prepare`. Will it be deprecated as well?
If yes, how can I implement such Dispatcher?