Fix some monad-control 1.0 breakage

Unfortunately doesn't fix everything, and I'm stumped on the last bit,
namely:

[1 of 1] Compiling Control.Concurrent.Async.Lifted (
src/Control/Concurrent/Async/Lifted.hs,
dist/build/Control/Concurrent/Async/Lifted.o )

src/Control/Concurrent/Async/Lifted.hs:263:6:
    Could not deduce (StM m b0 ~ StM m b)
    from the context (MonadBaseControl IO m)
      bound by the type signature for
                 waitEither_ :: MonadBaseControl IO m =>
                                Async (StM m a) -> Async (StM m b) -> m
()
      at src/Control/Concurrent/Async/Lifted.hs:(263,6)-(266,9)
    NB: ‘StM’ is a type function, and may not be injective
    The type variable ‘b0’ is ambiguous
    Expected type: Async (StM m a) -> Async (StM m b) -> m ()
      Actual type: Async (StM m a0) -> Async (StM m b0) -> m ()
    In the ambiguity check for:
      forall (m :: * -> *) a b.
      MonadBaseControl IO m =>
      Async (StM m a) -> Async (StM m b) -> m ()
    To defer the ambiguity check to use sites, enable
AllowAmbiguousTypes
    In the type signature for ‘waitEither_’:
      waitEither_ :: MonadBaseControl IO m =>
                     Async (StM m a) -> Async (StM m b) -> m ()