title: dropping a tokio::pin! -ned async block does not release borrow
body: <p>I have some async blocks that borrow some variables of my main. I call <code>pin!</code> on those blocks so that I can use <code>select!</code> on them afterwards. I would expect that when dropping the block, I can move my variable as I want in my main:</p>
  
  <pre><code>use std::time::Duration;
  use tokio; // 0.2.21
  
  enum Error {
      Any,
  }
  
  #[derive(Debug)]
  struct A {
      x: u32,
  }
  
  #[tokio::main]
  async fn main() {
      let mut a = Some(A { x: 42 });
      let test_that_times_out = async {
          tokio::time::delay_for(Duration::from_secs(5)).await;
          a.replace(A { x: 36 });
      };
      let timeout = async {
          tokio::time::delay_for(Duration::from_secs(1)).await;
          let ret: Result&lt;(), Error&gt; = Err(Error::Any);
          ret
      };
      tokio::pin!(timeout, test_that_times_out);
      // pinning so we can tokio::select!
  
      // [...]
  
      drop(test_that_times_out);
      drop(a); // instead do some useful stuff by consuming a
  }
  </code></pre>
  
  <p>(<a href="https://play.rust-lang.org/?version=stable&amp;mode=debug&amp;edition=2018&amp;gist=01efe807cd95c91d5d1cac7e583f08f6" rel="nofollow noreferrer">playground</a>)</p>
  
  <p>However, the compiler complains:</p>
  
  <pre class="lang-none prettyprint-override"><code>error[E0505]: cannot move out of `a` because it is borrowed
    --&gt; src/main.rs:31:10
     |
  16 |       let test_that_times_out = async {
     |  _____________________________________-
  17 | |         tokio::time::delay_for(Duration::from_secs(5)).await;
  18 | |         a.replace(A { x: 36 });
     | |         - borrow occurs due to use in generator
  19 | |     };
     | |_____- borrow of `a` occurs here
  ...
  31 |       drop(a); // instead do some useful stuff by consuming a
     |            ^ move out of `a` occurs here
  32 |   }
     |   - borrow might be used here, when `test_that_times_out` is dropped and runs the destructor for type `impl std::future::Future`
  </code></pre>
  
  <p>Removing the <code>pin!</code> call makes this snippet compile, however I cannot use <code>select!</code> anymore in this case, which is required for my use case. Is there a better way to release the borrow before moving <code>a</code>? Is it possible at all?</p>