Stdio.Buffer: fixed growth strategy
Unless trim() was called manually or unless the buffer was empty,
the growth strategy would never reuse empty space at the beginning
of the buffer. Instead, it would always allocate more space.
The code now works as described in the comment. When at least half of
the buffer space in the beginning of the allocated region is unused,
the data is moved to the front before new memory is being allocated.