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
@jobara - we wouldn't do anything special - just to consolidate our implementations around particular concrete use cases. I think @the-t-in-rtf 's case simply requires "at most one request in flight with all but the most recent discarded - but do not issue any requests at all if they are continuing to arrive at a certain rate" and unless I am mistaken I think ours requires the same, only minus the delay criterion. That is, I think we have an interest in opportunistically writing to persistence if we have been required to, but simply ensuring we don't have more than one outstanding request at a time. Given @the-t-in-rtf 's case is related to UI liveness rather than persistence, I think there is reason to supply the "debounce" in his case. So I think we have two main varieties required - 

i) simple concurrency limiting (for writing to couch/pouch)
ii) concurrency limiting PLUS debouncing (for UI liveness, e.g. autocomplete)

in both cases, older requests are discarded to make way for newer ones, if a request is "not queued"

Does this seem right? Can you think of other requirements or problems?