message: futures: add `TypedExecutor` impls
  The `tokio::executor::TypedExecutor` trait is not implemented for the
  `tracing_futures::Instrumented` and `tracing_futures::WithDispatch`
  types wrapping executors. This branch adds implementations of
  `TypedExecutor` for those types when the `tokio` feature flag is
  enabled.
diff: @@ -5,7 +5,7 @@ use futures::{
  Future,
  };
  #[cfg(feature = "futures-01")]
  -use tokio::executor::{Executor as TokioExecutor, SpawnError};
  +use tokio::executor::{Executor as TokioExecutor, SpawnError, TypedExecutor};
  use tokio::runtime::{current_thread, Runtime, TaskExecutor};
  #[cfg(feature = "futures-01")]
  @@ -46,6 +46,20 @@ where
  }
  }
  +#[cfg(feature = "tokio")]
  +impl<T, F> TypedExecutor<F> for Instrumented<T>
  +where
  + T: TypedExecutor<Instrumented<F>>,
  +{
  + fn spawn(&mut self, future: F) -> Result<(), SpawnError> {
  + self.inner.spawn(future.instrument(self.span.clone()))
  + }
  +
  + fn status(&self) -> Result<(), SpawnError> {
  + self.inner.status()
  + }
  +}
  +
  #[cfg(feature = "tokio")]
  impl Instrumented<Runtime> {
  /// Spawn an instrumented future onto the Tokio runtime.
  @@ -196,6 +210,20 @@ where
  }
  }
  +#[cfg(feature = "tokio")]
  +impl<T, F> TypedExecutor<F> for WithDispatch<T>
  +where
  + T: TypedExecutor<WithDispatch<F>>,
  +{
  + fn spawn(&mut self, future: F) -> Result<(), SpawnError> {
  + self.inner.spawn(self.with_dispatch(future))
  + }
  +
  + fn status(&self) -> Result<(), SpawnError> {
  + self.inner.status()
  + }
  +}
  +
  #[cfg(feature = "tokio")]
  impl WithDispatch<Runtime> {
  /// Spawn a future onto the Tokio runtime, in the context of this
  