FLUID-5542: Queued DataSource

Added a Queued DataSource that can combined with different requestQueues to synchronize, throttle, and debounce requests to a DataSource.

http://issues.fluidproject.org/browse/FLUID-5542

This is an extension of the work started in https://github.com/fluid-project/metadata/pull/43
This queue is misleadingly named - traditionally, "debouncing" involves the application of some kind of time window. Consult this link for the detailed difference between debouncing and throttling - http://unscriptable.com/2009/03/20/debouncing-javascript-methods/ - we should make sure that any names we use don't give false clues as to what kind of implementation we have. This might be called "amalgamate" since the expectation with a dataSource is that later requests include all the changes in earlier ones as well as some more - and so the behaviour is to coalesce/amalgamate multiple successive change requests into a single one that holds all of the most recent changes.