ryan-summers[m]: In our case i wanted a few things:
1. I wanted to be sure that my `.publish().await` on QoS1 messages did not return until ACK'ed
2. I wanted a subscribe API that allows
```rust
let mut subscription = mqtt.subscribe(...).await?;
let mut message = subscription.next()?;
```
Where dropping the subscription struct automatically unsubscribes. `mqtt` has interior mutability, so you can do as many as you want..
3. I wanted a continous background task that handles ping, ack and all reconnects