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 is useful "white-box testing" - that is, it verifies that the implementation takes a particular, known strategy in certain cases. However, we should also supply some "black-box testing" which makes some attempt to check that the implementation meets its requirements, independent of what strategy it chooses. This will be a little hard given we are trying to probe the results of implementation specific behaviour - but we should at least try. A possible strategy could be to build up the same JSON object in a variety of different orders in memory and verify that we get the same hash string in both cases. For example

var order1 = {};
order1.a = "1";
order1.b = "2";

var order2 = {};
order2.b = "2";
order2.a = "1";

on many platforms, the results of converting order1 and order2 using JSON.stringify() will differ - but we should check that our utility gives the same result in both cases.