Add a method to play a source with a SharedFuture buffer
This allows a source to wait on an async buffer load and start playing once
it's loaded. Control is given back to the app right away, and subsequent calls
to Context::update will check the status of any source's future buffer and
begin playing them when ready. This allows applications to asynchronously load
a buffer and tell a source to play it, without blocking on waiting for it to
finish loading and without having to manage delayed playing of sources.