Make buffer appending more efficient

We make cork_buffer_append_vprintf more efficient by not relying on
vsnprintf to determine the size of the format string.  Instead, we
call vsnprintf directly on the current buffer.  If it fails, we add
more space to the buffer and repeat.  This *should* happen at most
two times, and many calls will only call vsnprintf once.  We guard
against weird situations by wrapping this in a loop.