Introduce `OfflineCause.UserCause`

In order to distinguish between slave someone wanted offline and a slave that died or did not even started for technical reasons.

Making `OfflineCause.ByCLI` a subclass of `UserCause` using the same message format since the information who put the slave offline is more important than the fact he used CLI to do it.