There is a sequencing issue in BaseCsc.start: it waits for the SalInfo to be started, then writes some topics and then transitions to the desired initial state. But it is common for subclasses to want to write topics before those state transitions occur.
Fix this by breaking start into two pieces: start and start_phase2. Move the handling of initial state to phase2.
Also improve SalLogHandler so messages can be logged from background threads.