This function will use the given generator to generate an initial seeding key.
It will check whether the given cache already contains a value for that key, and if not,
calls the generator (with the previous value) to generate a new seeding key and retry.
The function either finds a suitable free slot, inserting value generated by value_fn and returns the found key,
or terminates with None when gen returns the initial seed again.
Convenience function to copy data in both directions between a Session and arbitrary
async IO stream.
This function is only available with Tokio and will panic with other runtimes.