File attachments bug

Note: This should go out after the data migration in https://github.com/alphagov/whitehall/pull/1243 has been run.

Trying to create an attachment without actually selecting a file causes an exception. This fixes that, as well as does some re-organisation of the attachments code, making `Attachment` fully abstract and moving non-shared code to the appropriate sub-class.