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
I'm not sure this strategy implements a semantic that is widely useful. Typically someone who is interested in throttling is probably also interested in "recency" - that is, they would like to make sure that the most recent request which is sent is actually acted on rather than thrown away as in the current impl. The impl should make sure that either i) it never discards requests, or ii) if it discards requests, it discards older ones rather than newer ones