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
Also I'm not sure why sessionInitialRetrieveTimeout is not doing what you did here in this branch.