Load CMA backend from shared library

* CMA backend interfaces moved into chromecast/public/media
* CMA backend implementation loaded from libcast_media through
  CastMediaShlib
* Backend API changes to remove dependency on Chromium types:
  * DecryptContext replaced with CastKeySystem
  * scoped_refptr replaced with raw pointers
  * In particular, DecoderBufferBase replaced in the backend API
    with non-refcounted DecoderBuffer.  In order to allow us to keep
    using refcounting and in particular use DecoderBufferBase in the
    rest of our pipeline, it gets wrapped in a DecoderBufferImpl
    (implementation of DecoderBuffer) for passing to the backend. So
    backends must delete the buffer pointer they're given but this is
    actually just decrementing the refcount on the underlying buffer.
  * base::Callback replaced with abstract interfaces
  * base::TimeDelta replaced with chromecast::TimeDelta in backend
    interface, essentially a stripped-down copy
  * NonThreadSafe removed (implementations can use ThreadChecker)
* TaskRunner interface provides PostTask/PostDelayedTask service to
  backend implementations
* Backend ownership / factory model changed.  Now, backend
  implementations return a MediaPipelineBackend which manages ownership
  and hookup of all the components.  It returns access to them as raw
  pointers.  The pipeline manages the lifetime of the MediaPipelineBackend
  instance.
* GetIsCodecSupportedOnChromecast refactored to remove calls back into
  cast_shell from backends (implementation can just return 'default' to
  indicate default logic should apply, including HDMI capabilities.

BUG=508534

Review URL: https://codereview.chromium.org/1257013003

Cr-Commit-Position: refs/heads/master@{#342370}
104 files changed