Add CrawlerMessageItem type to wrap extra fields in our workflow

To make the code easier to reason with, we're going to pass around an
object across channels that will hold things like the HTML body and
the URLs Found as we crawl.