Move HTML attachment rendering to own controller

It was a bit weird that it was mixed up in the normal attachments
controller.
Handle unpublished editions of HTML atachments

Fixes https://www.pivotaltracker.com/story/show/60861864
Failing feature for previewing a CSV attachment
Expand AttachmentVisibilty functionality

This is so the appropriate records can be loaded to preview a CSV
attachment.

I've added some docs explaining the utility of this class as it's a
strange thing that only exists because of existing debt around the way
we route attachments. Hopefully it will act as a handy signpost to
future-developer and give them some context as to the reasons why it
exists.
Implement CSV attachment preview

CSV preview is currently limited to the first 1,0000 rows
Front-end work still to be done.
Style links to attachment preview
CSVPreview guesses character encoding

The CSV library will chock unless you get the encoding right. We can
use the charlock_holmes gem to guess the encoding of the file.
Handle CSV preview encoding errors

This should be a rare occurance, but if we cannot guess the encoding
of a file, or if we get it wrong, we want to gracefully continue.
CsvPreview reports if the preview is truncated
Add white-links mixin
Style attachments preview page
Simplify character encoding checks in CsvPreview

Using a simpler form of encoding checking based on @alext's work on
the imminence project.
Correct selector in feature step
Correct typo
Ensure file handle is closed once sample is read
Verify the correct number of rows are returned
Merge pull request #1078 from alphagov/60067112-csv-preview

CSV Attachment preview

https://www.pivotaltracker.com/story/show/60067112