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.
I thought hard about this one: I think that we need to have ice-related events occur outside the RTCPeerConnection task queue.  Otherwise, applications block events by invoking methods.

This one is different though.  It doesn't result in execution of code.  Instead, this is a description of actions that occur anywhere.  The firing of an event queues a task, but that's the only place where execution occurs here.