In order to make efficient use of threading, we need to implement a framework from producer/consumer at various points in the "pipeline". This way, we can make use of all available resources (CPU / IO / Network) at all times during computation. Queues should be set up at the following points:
-- Between the Plugin / ImageReader
-- Between the ImageReader / TileMapper
-- Between the TileMapper / MosaicCanvas