Surface Plan B "sender-only transceivers" in prep for Unified Plan.

WebRTCRtpTransceiver gets sender-only and receiver-only varieties such
that RTCPeerConnectionHandler::AddTrack() can return
webrtc::RTCErrorOr<std::unique_ptr<WebRTCRtpTransceiver>>.

This CL...
- Adds ImplementationType() to WebRTCRtpTransceiver.
- Adds RTCRtpSenderOnlyTransceiver.
- Adds RTCRtpReceiverOnlyTransceiver.
- Update AddTrack() to use TransceiverStateSurfacer and the new classes
  and to return "error or transceiver".

This means that...
- We surface third_party/webrtc errors to blink.
- The return value is compatible with Unified Plan's AddTrack() which
  adds a transceiver (sender and receiver, not just sender).
- The new codepath uses TransceiverStateSurfacer, making it trivial to
  update AddTrack() to surface the full transceiver in Unified Plan in
  follow-up CLs.
  Prior to this CL the codepath relied on implicit PROXY jumps to the
  signaling thread which made it impossible to create transceivers,
  since these have to be created on the signaling thread.

Updating the AddTrack() codepath to surface transceivers in Unified Plan
is now trivial. A follow-up CL will update the SetLocalDescription() and
SetRemoteDescription() codepaths to use TransceiverStateSurfacer as
well.

TBR=foolip@chromium.org

Bug: 777617
Change-Id: I2ec2739fbcaa49bdcb8c94670403315147aba589
Reviewed-on: https://chromium-review.googlesource.com/1133381
Commit-Queue: Henrik Boström <hbos@chromium.org>
Reviewed-by: Guido Urdaneta <guidou@chromium.org>
Cr-Commit-Position: refs/heads/master@{#575227}
15 files changed