Session management retry

SessionManagement is not robust to communication failures and has no mechanism
to continue if an update of SessionManaging gets dropped. This uses the timeout that
was started to trigger a re-request. This resolves the problem for me and connections
establish reliably with radio link and USB.

While I was at it I also documented the code and moved a few methods around to make
the order more logical (moved the object retrieval code after the session management
code).

It might be easier to compare the changes before the last patch to see the important
changes. The large blocks of code that moved had no changes other than comments.

Fixes #1307
> Wait - how is a managed session which knows it didn't complete the negotiation good? That will hide objects / not transmit objects that should and create a strange failure pattern...

So no it will not hide any objects, but it will cause some settings or metadata to be out of sync, that was the way before session management, and it is a balance between session spent in session init and accurate data.