IDynamicShardingClient Wrapper interface for the sharding client

This exists so that we can swap in an HTTP one or testing one if needed. 

IShardHelper Interface of an object that describes the sharding strategy to adopt for a configuration. 
ITestsPool Interface describing a pool of tests that we can access and run 


DynamicShardHelper Sharding strategy to allow work remote work queueing between multiple TF instances 
LastShardDetector When running local sharding, sometimes we only want to execute some actions when the last shard reaches invocationEnded(long)
LocalPool Implementation of a pool of local tests 
ParentShardReplicate Replicate a setup for one device to all other devices that will be part of sharding. 
RemoteDynamicPool Implementation of a pool of remote work queued tests 
ShardBuildCloner Helper class that handles cloning a build info from the command line. 
ShardHelper Helper class that handles creating the shards and scheduling them for an invocation. 
StrictShardHelper Sharding strategy to create strict shards that do not report together, 
TestsPoolPoller Tests wrapper that allow to execute all the tests of a pool of tests.