Fix logger watcher race condition

Previously a backend could be removed from logger and the watcher would not have exited before the `Logger.remove_backend/1` call returned. This meant that a new watcher could not always be started because the child (watcher) might still exist but be about to die.

I need to investigate whether switching to a `simple_one_for_one` with non-temporary children that can return `:ignore` will cause a problem - it might.