Move cache invalidation into CachedGpioExpander::digital_read() itself,
triggered by detecting a new loop iteration via App.get_loop_component_start_time().
This eliminates the need for a dedicated loop() override in every GPIO expander
component that only existed to call reset_pin_cache_().
Removes loop() from: pcf8574, pca9554, tca9555, pi4ioe5v6408, pca6416a,
mcp23016, mcp23xxx_base. For sx1509, only the reset_pin_cache_() call is
removed (loop() is kept for keypad scanning).