Clean up run method by breaking into smaller methods
Better integrate the crawler and monitor when checking for executors

1) Implement the shutdown() method in the crawler to shutdown the executor pool
2) Add a polling interval to the monitor so you can control how long to sleep between active executor checks
Rename crawler register method to crawl
Create a reporter object and made it a dependency for scanning
Update shutdown to call reporter to generate a final report
Complete wiring reporter with gatherers into the scanner
Implement a broken link stats gather
Monitor names the monitoring thread it spawns
Create a crawler builder to simplify creating and configuring a crawler
Update crawler to provide access to the report after crawling is completed
Merge branch 'feature/add-reporters-to-crawler' into develop