Protect against infinite recursion in focusOverlay

An easy way to repro the infinite recursion is to create multiple _opened_ overlays, and dismiss them at the same time (toasts).

Here's what's happening. Say there are two overlays (A, and B), that were dismissed at the same time - and that their transitions end within the same run loop tick:
 
 * `A.transitionend`:
   * Removed from `overlays`.
   * Calls `applyFocus`, which calls `focusOverlay`.
 * `focusOverlay` calls `B.applyFocus`:
   * `B.closed == false`, so `focusOverlay` is called again.
   * ...recurse.

The call to `async` lets the `overlays` stack resolve before showing the next one.