Bug 836599 - Part 8: Add a non-realtime media graph API to produce a given number of ticks; r=roc
Bug 836599 - Part 9: Implement the DOM binding for OfflineAudioContext; r=roc
Bug 836599 - Part 10: Use the non-realtime MediaStreamGraph API and a custom destination node engine for OfflineAudioContext; r=roc

We offload most of the logic for OfflineAudioContext to the destination node,
since that's where the sample recording needs to happen, so doing this will
make the code simpler.
Bug 836599 - Part 11: Implement the processing of OfflineAudioContext; r=roc

We use a custom AudioNodeEngine for the destination nodes belonging to
OfflineAudioContexts, and there we record the rendered buffer.  Once the buffer
is full, we resample it if the sampling rate of the OfflineAudioContext is
different than the ideal sampling rate, and then we hand it off to the main
thread in order for the complete event to be dispatched.
Bug 836599 - Part 12: Fix the lifetime management of the Web Audio graph in presence of OfflineAudioContexts; r=roc

Here we make the non-realtime graphs to go to sleep until they're shut down
from the main thread.  This allows us to use the common forced shutdown code
path in MediaStreamGraphImpl::RunThread.  We also need to delete the graph
object when the last message is dispatched to it.

In addition, we need to make sure that the AudioNodes also get released when
they're no longer needed.  To do this, we need for force the SelfReference of
AudioBufferSourceNodes to be released when the context is shut down, and also
trigger the destruction of the graph there.
Bug 836599 - Part 13: Add a unit test for OfflineAudioContext; r=roc
Bug 836599 - Part 14: Run most of the existing Web Audio tests using OfflineAudioContext as well as AudioContext; r=roc

This helps us get a decent amount of test coverage on OfflineAudioContext in
both the existing tests and the future tests.