This does not apply on it's own see test plan.
Removing the `std::function` does not improve performance by much:
(D4730)
```
async cost:
enqueueing: 337ms
work done: 337ms
total: 343ms
async round-trip:
total: 814ms
```
(D4730 + D4812 + this patch)
```
async cost:
enqueueing: 331ms
work done: 331ms
total: 335ms
async round-trip:
total: 813ms
```
I achieved "removing the std::function" by templating the `SharedState` not on the result but on the function. The `Future` does not hold a pointer to the SharedState anymore (The Future would have to be templated on the function as well) but to a subobject of it (the `Receiver`) which is templated only on the result type.
I think spliting the `SharedState` in a comunication and a ownership part is the way to go. (single responsibility)
What do you think?