mon: Monitor: dissociate msg handling from session and connection logic

This pull request features 3 major things:

1) dissociate msg handling from session and connection logic:
Having ``Monitor::_dispatch()`` responsible for checking whether a message should be dispatched or not, and having ``Monitor::dispatch()`` doing the actual dispatching, makes for more readable code.

2) make sure we always have a connection associated with a message
If that happens not to be the case, assert.  We expect every message to have a connection.

3) enforce the first message from a client to be an MAuth:
If we are about to set up a session for a client, we should make sure that the message triggering the session establishment is an MAuth -- we don't want clients sending messages to the monitors unless they are properly authenticated.