In CachedThreadScheduler, only return borrowed event loop once

Since Scheduler.unsubscribe should be idempotent and can be called multiple times, make sure to only return borrowed event loop to pool once