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 function is mostly identical to enqueueWithModel - and this duplication also creates a hazard for people wanting to customise the queue policy since they will need to provide implementations of both of these. We should i) consolidate these into 1 function as well as ii) provide a clear means for the user to just be able to replace enqueueImpl without necessarily having to replace enqueue/enqueueWithModel.