CrawlerMessageItem should only know relative paths

Rename the `FilePath()` method on the `CrawlerMessageItem` interface to
`RelativeFilePath()` and change its logic accordingly so that it only
returns a relative file path, to which we append the mirror root
directory in `WriteItemToDisk()` in `workflow.go`.

This better separates the concerns of the workflow versus
`CrawlerMessageItem`, which should not concern itself with the mirror
root.
Pass mirrorRoot as argument to WriteItemToDisk()

So that WriteItemToDisk() doesn't need to care about configuration; this
should be handled in `main.go`.
Rename channel variables to be more descriptive

So that's it clear that these are channels.
Relative file paths shouldn't have a leading slash

Previously we were prepending the relative filepath returned by
RelativeFilePath() with a leading slash.

This isn't correct - a relative path should not have a leading slash.
The reason this was added was so that there would be a slash between the
mirror root path and the relative file path, but this is already handled
by path.Join[1].

Update the tests accordingly.

Also, fix the following tests, which weren't testing for a '.html'
suffix because they were not testing HTML content:

- strips out the domain, protocol, auth and ports
- strips illegal characters

[1]: http://golang.org/pkg/path/#Join
Panic if MIRROR_ROOT environment variable not set

Panic so that the application fails fast.