This refactor is to make D9595 possible.
The intention is to fix outgoing's ownership issue when session creation fails (send forces outgoing to be mutable).
Doesn't look like a very optimal pattern, but not sure if this can be improved are is there a more graceful way to handle this - if anyone has any suggestions I am happy to change this 😄
Creating separate diff to make it easier for reviewers, actual usage is in D9595.
Depends on D9593