Queue and SizedQueue are not clonable (https://bugs.ruby-lang.org/issues/9440#change-44497)
When setting SizedQueue#max=, drain the previous queue to the new resized queue.
This has the effect of preserving items in the queue, and prevents the MRI test from hanging.
Support the second optional arg for Queue#push, which throws an exception
if the queue is full.
Merge pull request #2117 from cheald/queue_fixes

Queue fixes