ExternalAttachment model with external_url field.
external? method for attachments.
Views for external attachments.
Remove external_url functionality in admin.
Create and edit external attachments.

* Changes the single "html" parameter to Attachment#new to "type" which accepts
values of "html" and "external".
* Render external attachment form with external_url field.
* Display url for external attachments (in place of filename) on index page.
* Add allows_external_attachments? method to Attachable, returning false, and
override on Publication and Consultation to return true.
* Show link to add new external attachment on attachments index page if
allows_external_attachments? is true.
Check allowed attachment types.
Unit and feature test fixes.
Data migration to create external_attachments.
Remove external references in consultations.
Remove special case from attachment_required.
Front-end functional test.
Tidy up attachments controller, add tests.
Revert changes to consultations.

Consultations are sufficiently different from Publications that it makes sense
to keep the external_url field for them.
Add Attachment#readable_type, use in admin views.
Simplify validates statement.
Fix ordering of stats announcements in admin

We want the announcements returned in reverse date order, i.e. the most recent (
or future-dated ones) first.
Add support to filter announcements by date

Can ask for past or future announcements only. When asking for future statistics
announcements, they are returned in date order, i.e. the closest one first. This
makes it more likely that users will see the announcements that are most
pertinent, i.e. those that are due soon but do not yet have a linked
publication.
Wire in admin stats announcements date filtering
Highlight unlinked announcements and tweak filter

This draws attention to those announcements that have yet to be linked to a
publication.
Kill n+1 queries on admin announcements filter

We pre-fetch all the associations that get used on the index page