Adds a queue container

Adds a queue/FIFO container, considering the feedback given in #2361.
Is it really necessary to have separate methods for enqueueing with/without returning the container? Why can't we just return the container from `enqueue` and just delete this method? It's perfectly OK to call a method and ignore its return value, so a single method could serve both purposes.