Prevent corruption when expanding a perfectly saturated queue

If a `QueueFile` has no unused space, and the first element begins somewhere other than at the beginning of the queue, elements at the beginning of the file are not copied after the existing elements as the file is expanded. The next `peek()` may then return no data or corrupted data.

This change contains a test to demonstrate the flaw and simple fix.