Two optimizations to reduce overhead in the scheduler hot path:
1. Skip cancel_item_locked_ entirely for anonymous items (STATIC_STRING
with nullptr name) in set_timer_common_. These can never match any
existing item, so the scan is pure waste. This is the common path
for Component::defer(func).
2. Split mark_matching_items_removed_locked_ into an inline wrapper
that checks for empty containers and a noinline slow path. This
avoids the function call overhead when containers are empty, which
is the common case for defer_queue_ and to_add_ after draining.