Feature/log disconnected rebased

rebased #980 . See that issue to learn the discussion.
From http://www.erlang.org/doc/reference_manual/typespec.html,

>  Some functions in Erlang are not meant to return; either because they define servers or because they are used to throw exceptions as the function below:

>       my_error(Err) -> erlang:throw({error, Err}).

> For such functions we recommend the use of the special no_return() type for their "return", via a contract of the form:

>      -spec my_error(term()) -> no_return().

This function return `ok`, so just `ok` or `any()` (if one does not care about return values) seems better.
But, I know, you are far better than me in respect to type theory, so please deny/correct me :sweat_smile: