+act - Reworks implementation of ActorSystem shutdown

  * deprecates awaitTermination, shutdown and isTerminated
  * introduces a terminate-method that returns a Future[Unit]
  * introduces a whenTerminated-method that returns a Future[Unit]
  * simplifies the implementation by removing blocking constructs
Alternate idea for TerminationCallbacks:

    final class TerminationCallbacks(upStreamTerminated: Future[Unit])(implicit ec: ExecutionContext) {
      private[this] final val done = Promise[Unit]()
      val ref = new AtomicReference[Promise[Unit]](done)

      upStreamTerminated onComplete { t => ref.getAndSet(null).complete(t) }

      @tailrec def add(r: Runnable): Unit = {
        val p = Promise[Unit]()
        ref.get match {
          case null ⇒ ()
          case some ⇒ if (ref.compareAndSet(some, p)) some.completeWith(p.future.andThen { case _ ⇒ r.run() }) else add(r)
        }
      }

      def terminationFuture = done.future
    }