Handle fetchQueue error for preempted requests

When a particular instance preempts a request round trip, the fetch queue can
be left in an indeterminate state that can cause future requests to error out
due to assumptions about the fetch queue’s contents.

This change ensures that the fetchQueue is completely cleaned. Additionally it
protects from NPEs that might occur due to preempted requests in promise
supporting environments.
When is `fetchQueue !== self.fetchQueue`?