DataSource that can be used to process a predetermined list of URLs or a list of urls
that can grow as it is processed. To support such crawling, you must provide the
crawler thread that is responsible for adding urls to the list. Call setCrawler to
set the crawler thread and start the thread before you start using this DataSource.
The next method will block while the list is empty but crawler thread is still alive.
When the crawler dies (or if it is null to begin with) and list becomes empty, next will
return null. You may want to override makeDataStructure method.