Fix for the buffer queue build-up

I noticed the buffer queue issue still exists, so I did this quickly with the online editor. (It's untested.)

The BufferRaiiHelper is never boxed (despite the specification saying otherwise), so the using statement really is almost just a shortcut for

ReadyBuffer();
try
{
    ...
}
finally
{
    FreeBuffer();
}

, which should in theory ensure there are never any leaks of pinned memory. There's a small difference in behaviour as the buffer is not kept while unused and a new one is instantiated for every high level call outputting to memory.

This change is under the assumption that the buffer queue is emptied by the time Sync() returns.
I probably chose the using block a bit too large, so feel free to move its end up by a few lines. Freeing the buffer directly after Sync() should work, I think.