Nollie: fix SIGSEGV on UpdateZoneLEDs / UpdateSingleLED for 8/1/28/12-channel variants
RGBController_Nollie::channel_index is a raw int pointer member that's only assigned in SetupZones() for the 32-channel and 16-channel Nollie variants (it points at the ch32 / ch16 / n16 reorder arrays). For all other PIDs (NOLLIE8, NOLLIE8_OS21, PRISM8_OS21, NOLLIE1, NOLLIE1_OS21, NOLLIE28_12) the pointer is left default-uninitialized, but UpdateZoneLEDs() and UpdateSingleLED() unconditionally dereference it with channel_index[zone] / channel_index[channel]. The wild-pointer read crashes the server on the first single-zone write to any of these devices - DeviceUpdateLEDs() avoided the bug because it already branches on PID and uses zone_idx directly in the else path.
This patch:
- default-initialises channel_index to nullptr in the constructor
- applies the same PID branch to UpdateZoneLEDs and UpdateSingleLED that DeviceUpdateLEDs already uses, calling SendUpdate() after the per-channel write on the non-32/16 path
- changes the single-zone / single-LED behaviour for 8/1/28/12-channel Nollie variants from "always crash" to "matches whole-device update"
Tested on Nollie 8CH (VID 0x16D2 PID 0x1F01) running NOLLIE8_PID code path with a five-fan setup; verified set_color() on individual zones and per-LED updates now work without crashing the server, and the fans display the intended colors.