Add a inital frontend for email subscription

Tweeked the styling of the button mixin to make the text more central to
the button.

Added JS to add new rows but this will want a server-side equvilent. It
is implemented as a proper form element so this can happen.
Move home#email_signups into email_signups#show

This'll pave the way for having a proper model to represent the email-signup.
Add placeholder EmailSignup model and start using form helpers

EmailSignup pulls in enough of ActiveModel to be used in form helpers, also validations which we'll use later to make sure the user choices are valid.
Pull down translations, don't fetch world locations

World locations aren't used and the translations speed up the page.
EmailSignup has alerts and is not valid if there are none

Also, not valid if any of the alerts are invalid.  We use the alerts from the email signup instance to generate the form too.
Alerts are valid if they have a topic, and it's a real one
Alerts are valid if the organisation is present and a real slug
Alerts now require a document_type and for it to be valid

Renamed from content_type to document_type, made EmailSignup be in charge of what document types it allows.  This does involve a slightly hacky use of a DocumentTypeOptionForAllOfType class that only exists to allow for labels and slugs to exist for the "all" option on a per-type basis.  These objects share enough of the API of the PublicationFilterOption and AnnouncementFilterOption objects that we can use them interchangeably - where we are using them, in this UI.
Put the .alphabetical on topics into EmailSignup

The doucment_type and organisations already do sorting (explicitly and implicitly) so this might as well too.
Tweak the form elements for the alert objects

1. put an index on them (this will end up generating a hash instead of an array, but it'll mean the ids and names are actually unique).
2. pass in the topic, organisation, and document_type to the helpers that generate the options for the selects.
3. show any errors from the email signup or alerts
Make the duplicate-fields js code common for use in frontend and admin

It's now broken up a little so we can reuse the part that iterates over form elements and renumbers them if they have a blah[<idx>][blah] style names.  We do this so that in the email-signup js we can properly duplicate the alert fields.
WIP