Rename `HTMLBody` field to `ResponseBody`

We're going to support more MIME types than just `text/html` now, so
we should generalise the field.
Wrap the HTTP Response in a `CrawlerResponse` object

This can then hold both the Body and any HTTP headers we want to pass
around and reuse.
`CrawlerResponse` object owns whether or not the body `isHTML`

This is now owned by the respective object as it has ownership over
the HTTP Body response.
Rename `IsHTML` method to `IsBodyHTML`

The `CrawlerResponse` now holds both the header and footer for a given
HTTP response so we can check the actual Content-Type rather than
just matching between `plain`, `html` and `octet` text strings.
`ContentType` returns the content type as a string

This removes any of the extra information that usually litters the
Content-Type for our various different application stacks as well.
Add a list of constants for the content types we're supporting

For now, these will be the content types that we'll accept and write
to disk.
A response can tell whether it holds an `AcceptedContentType`

To make it easier to tell whether or not a given response is supported
add a helpful method on the object that can tell us quickly if that's
the case.
Improve logging for `WriteItemToDisk` workflow function

Rather than using the same log message for, make them specific.
Set Content-Type HTTP header and remove `expectedFilePath` variable

Update these tests for the `item.RelativeFilePath()` so that they
still behave as we expect before we start to manipulate the underlying
code to support multiple file formats.

Also removed the `expectedFilePath` variable as it was confusing to
follow. It didn't make sense to keep on changing this single variable
when the reference could just as easily be kept inlined. This is now
the case so the tests are more self contained.
`WriteItemToDisk` writes non-HTML responses to disk and acknowledges

Non-HTML responses can't be forward on for extraction, so we want to
write them to disk and acknowledge them immediately.
Remove `IsBodyHTML()` method from `CrawlerResponse`

This has been superseded by the `ContentType()` and
`AcceptedContentType()` as we're going to be supporting more content
types than just HTML.
`CrawlerResponse` stores `Content-Type` instead of all HTTP headers

Rather than storing the full `http.Header` string map, store just the
`Content-Type` value as it's all we need at the moment.
When MIME types can't be determined, reject and don't requeue messages

If the `Content-Type` can't be determined for a 200 HTTP status it
might indicate that the page has been malformed. In that case, don't
requeue it.
Merge pull request #64 from alphagov/75962418-write-non-html-content

[#75962418] Write non-HTML content to disk