Add MediaStreamTrack.ended promise

I took a stab at the various failure conditions, mirroring them on getUserMedia as much as possible.