Add a `SourcesIdQueueInput` that allows manipulating items in the queue
This PR abstracts the functionality the a SourcesQueueOutput needs from its upstream input queue, and then adds a new type of queue that can have ids associated with the items.
The idea is that you can use a SourcesIdQueueInput more like a playlist, which is something consumers of this library might well want.
This is a "first draft", it works, but I'm open to suggestions for api changes etc, and I know some of the doc comments are missing and/or need to be improved. Just wanted to get feedback on whether this is something you would consider before going further.
I was going to write an issue about this idea to see if I should implement it, but to my surprise, someone is already on it. Legend