Bug 989921 - Allow the MediaStreamGraph mixer to send data back to multiple consumers. r=jesup
Bug 848954 - Part 1 - Factor out clocks and scheduling of MSG iterations. r=roc
Bug 848954 - Part 2 - Put the thread management in the driver. r=roc
Bug 848954 - Part 3 - Separate interval time calculation and actual processing, and give an audio-callback compatible interface to the Process function. r=roc
Bug 848954 - Part 4 - Factor behavior for drivers that manage their thread. r=roc
Bug 848954 - Part 5 - Mix down all audio and only output a single stream. r=roc
Bug 848954 - Part 6 - Put cubeb-related static functions in their own file.  r=kinetik
Bug 848954 - Part 7 - Get rid of the stack allocated message queue. r=roc

In the next patches, when the AudioDriver will be implemented, the audio backend
thread (that we don't control), will return from the stack frame where the
nsTArray that allows the MSG thread to exchange message queues in a efficient
manner with the main thread. We put it in the MediaStreamGraph to avoid adding
an allocation/deallocation per iteration on the MSG thread.

In addition, the graph will be able to run on different threads during its
lifetime, so we can't guarantee a stable stack frame to allocate things on
anymore.

The array are renamed with meaningful names, explaining the double-buffering
pattern: the back queue is filled by the main thread, and is swapped with the
front queue that is processed by the MSG thread.

Arrays accesses are synchronized using the driver's monitor.
Bug 848954 - Part 8 - Implement classes to ensure safe audio buffer manipulation. r=roc
Bug 848954 - Part 9 - Allow to pass in hints when getting a reference to a MediaStreamGraph to get the right driver started as soon as possible. r=roc

This is useful because some platform have rather slow audio stream
initialization time, especially the first time an audio stream is created for
the process.

We put in telemetry probes to measure that:
First stream opened for the process:
http://telemetry.mozilla.org/#filter=nightly%2F33%2FAUDIOSTREAM_FIRST_OPEN_MS&aggregates=multiselect-all!Submissions!Mean!5th%20percentile!25th%20percentile!median!75th%20percentile!95th%20percentile&evoOver=Builds&locked=true&sanitize=true&renderhistogram=Graph

Subsequent streams:
http://telemetry.mozilla.org/#filter=nightly%2F33%2FAUDIOSTREAM_LATER_OPEN_MS&aggregates=multiselect-all!Submissions!Mean!5th%20percentile!25th%20percentile!median!75th%20percentile!95th%20percentile&evoOver=Builds&locked=true&sanitize=true&renderhistogram=Graph
Bug 848954 - Part 10 - Add a MediaStreamGraph driver based on an audio callback.  r=roc
Bug 848954 - Part 11 - When deciding to block a MediaStream due to a speculative data underrun, don't block if we have exactly the right number of frames buffered.  r=roc
Bug 848954 - Part 12 - Make sure COM is initialized when calling into WASAPI functions. r=kinetik
Bug 848954 - Part 13 - Add an RAII class to ensure another thread is not in the audio callback when shutting down. r=roc
Bug 848954 - Part 14 - Run all blocking cubeb operations off-main-thread. r=roc
Bug 848954 - Part 15 - Allow an AudioCallbackDriver to sleep to save power.  r=roc
Bug 848954 - Part 16 - Make AudioCallbackDriver respect the AudioChannelType.  r=roc
Bug 848954 - 17 - Increase the size of the stack for the audio threads on Windows. r=kinetik
Bug 848954 - Part 18 - Start the thread after having processed the messages to make sure there are messages in the queue when processing starts. r=roc
Bug 848954 - Part 19 - Delete the mixer callbacks on removal. r=roc