First cut at fixing the whole "queue a task" mess

This turned out to be a little tricky.  Rather than redefine "queue a task", which would have touched a lot of the spec (see the first commit here, which is basically content-free), I've defined a new label.  "Queue an RTCPeerConnection task" is a new definition that this adds, which is attached to a PC-specific task queue.  This serializes all of the mutation functions: create{Offer|Answer}, set{Local|Remote}Description, {add|remove}Track, createDataChannel and getIdentityAssertion.

This probably needs careful review.
In an earlier bug, the argument for "queue a task" here was that if multiple things happen that change the state, the state change has to happen in a queued task, otherwise the onstatechange handler will be called with the state variable showing a different value than what the state was changed to. I think Adam may be able to explain more clearly.