Refactor IncomingMessage.get_attachment_by_url_part_number
Check that display_filename matches URL part number or fallback

If the display_filename of the attachment found from the
URL part number doesn't match the passed in display_filename
then the email may have been reparsed, causing a reordering.
In that case, look to see if there is another attachment that
uniquely matches that filename, and, if so, return that other
attachment.  If no matching uniquely matching filename is
found, redirect to the incoming message, rather than giving
returnin a 404.
Make an attachment filename in test fixtures more difficult

This commit changes 'hello.txt' to 'hello-world.txt' in the
incoming-request-two-same-name.email fixture.  The reasoning
for this change is that if there are no special characters in
the filename then filename and display_filename will be the
same and the tests won't pick up any confusion between the
two.

The test requests to :get_attachment and
:get_attachment_as_html should get the display_filename rather
than filename.
The file_name on getting an attachment should be the display filename

Previously the behaviour would have been the same, since we weren't
checking the filename so strictly.
Add a comment about the behaviour of the censor rules
Only cache attachments that are returned with a 200 HTTP status code

Otherwise redirects will be cached, and since headers and the status
code aren't stored, a non-redirecting redirect page will be returned
in the future, but with 200.  It's easiest to only cache the 200
responses.