Ensure required handlers are always restarted

Changes `Logger.Supervisor` to `rest_for_one`:
* `Logger.Config` is before other handlers, and if it crashes all the other handlers will be restarted. This tries to ensure we have the sync protection.
* `Logger.ErrorHandler` is after the other handlers, there is no point forwarding messages when there is no handler to handler them. Also we don't want it crashing to bring down the other handlers.
* `Task` must be after the `Logger.Watcher` `Supervisor` to ensure it restarts the backends.

Changes the `Logger.Watcher` `Supervisor` to `one_for_one`. This is required just in case the starter `Task` fails and is restarted causing duplicate children. This has the side effect of preventing unintentional duplicate handlers on `Logger`.

Changes how `Logger.Watcher` works so that all backends are started concurrently. This provides the following features:
* Backends are started as fast as possible
* Simplifies starter `Task` code so it does not need to handle a backend that can't be started
* Starting the backends does not block the `Logger.ErrorHandler` being started
`already_present` should mean that the backend exited normally. I did this to keep the behaviour as similar as possible to the previous behaviour. This patch suffers from the problem that bad backends can cause other handlers to be restarted, and eventually bring down all of `Logger`. It was too complicated to fix both the problem of required handlers not being restarted and handling bad backends in the same PR. I am unsure a decision was made on how to handle bad backends.