- [x] Move device cleanup to its own thread
- [x] Every 5 seconds, runs hid matcher's cleanup fn and checks qty of processed devices
    + [x] If qty of processed devices > last_clean_device_qty + 20, run another device cleanup
- [x] Device cleanup should omit sdout lines with `removing device` text, crowds debug log
- [x] Change device cleanup log msgs to use "DEVICE CLEANUP"
- [x] Change WANDERER to "(wanderer)"
- [x] Keep a counter of how many times an HMD has been detected
- [x] If detection counter is >= 10 and one of its firmwares are still outdated: set LED to red flashing, AVOID calling headset.erase()
- [x] Change "retrying firmware update" event to simply call headset.erase() + reset its MCU, then conclude the thread.
- [x] Add staggered calls to FPGA FW update
- [x] Change all LED color calls to use either solid or flashing
    - [x] Immediately when an HMD is picked up (even before pairing), set LED color to flashing purple
    - [x] FPGA update --> flashing white
    - [x] Done updating --> solid green

Check on error case "cannot schedule new futures after shutdown" (seems to happen during device cleanup)

- [x] Add an argument to the enter_bootlader() fn to forego the wait for bootloader to appear (and thus forego returning the bootloader path)