Utility to buffer items into a queue that follow a simple block pattern on calls to push and pop when the queue at a max size or empty.