Make the bulk edit error messages specific to the type of error

- Before, everything would just say "Enter a valid URL to redirect to".
  Now it says "The URL to redirect to must be on a whitelisted domain"
  for a non-whitelisted redirect, for example.
Move everything from BulkBase into BulkEditor and delete BulkBase

- Nothing but BulkEditor uses BulkBase anymore.
Reword the blank redirect URL error message

- This makes for more consistency across bulk add and bulk edit, and we
  no longer need to append "New URL" to the error message.
- This also fixes the bug where the bulk edit modal was displaying the
  error message before the user having submitted the form.
Merge pull request #421 from alphagov/bulk_edit_consistent_error_messages

Make the bulk edit error messages specific to the type of error
Make the single edit mapping type labels clickable

- Before, only the radio buttons on the single edit mapping form were
  clickable, not the labels. This works by setting the `value:`
  attribute of the Rails `f.label` helper to whatever `type` is
  depending on the mapping, leading to greater consistency across the
  app.
Make the cursor change to a hand when hovering over radio buttons

- Before, this was only the behaviour for the radio button labels.
- Thanks to Edd Sowden for giving me a better way to globally set the
  CSS for every radio button rather than adding a `hand-pointer` class
  to every radio button tag in the app.
Merge pull request #429 from alphagov/radio_button_change_mouse_pointer

Make the cursor change to a hand when hovering over radio buttons
Add a feature flag to enable downtime for the app

This adds a feature flag in an initializer which, when enabled, returns
a 503 error page to all users who do not have the 'admin' permission.
This is to prevent users editing mappings while we are migrating the
database from MySQL to PostgreSQL, but will let us check that everything
is working correctly before re-enabling general access.

Since the check for the feature flag is in the ApplicationController,
nearly all of the app is protected by it. The exceptions to this are:

- the hosts API: it isn't a problem to leave this visible, so long as
  we disable the CDN configuration job (this step is already in our
  migration plan)
- the errors controller: we need to leave this visible so that it can
  serve the 503 page
- the users controller from gds-sso: this needs to be visible so that
  signon integration works as normal

Going down this route for managing downtime (rather than doing it at
the nginx level) relies on the app running at all times, but this
should be the case for us anyway.

We should merge this before the postgres-master branch is merged, and
deploy this change in advance of the planned downtime, with the feature
flag set to false. To start downtime, we can set the flag to true in
alphagov-deployment and re-deploy the same release tag. After migrating
the database across, deploying the move to PostgreSQL and checking that
all is well, we can revert the flag to false and re-deploy the latest
release tag.

Since our zero-downtime unicornherder leaves two batches of unicorns
running for a couple of minutes after a deploy, we may want to hard-restart
the app just after deploys changing the flag so that everyone sees
the 503 page (or the app coming back up) at the same time, to avoid
confusion.
Add contact details to the 503 maintenance page
Merge pull request #427 from alphagov/downtime_feature_flag

Add a feature flag to enable downtime for the app
Merge pull request #428 from alphagov/clickable_radio_button_labels

Make the single edit mapping type labels clickable
Update govuk_admin_template to 1.1.5

* Fixes missing icons for any version of this app that was never Rails 3
  (hi transition-postgres) on Preview
  https://www.pivotaltracker.com/story/show/80021464
Merge pull request #431 from alphagov/fix-missing-assets

Update govuk_admin_template to 1.1.5
Convert config/migrations to PostgreSQL

* Remove structure.sql, add schema.rb, configure appropriately
* Remove mySQL-specific option values from migrations
* Remove mysql2 gem in favour of pg
* Empty the migration which fixed MySQL collation
  This migration was used to fix some collation inconsistencies in
  MySQL but we don't need its functionality on PostgreSQL. The migration
  will remain in the schema_migrations table in the database, so we're
  leaving this file in place but with empty methods to avoid the
  potentially confusing '********** NO FILE **********' message shown by
  `rake db:migrate:status`.
Explicit TNA timestamp conversion

* mySQL used to implicitly convert this
* We aren't in Kansas any more
Use correct type for http_status

* mySQL would handle this implicitly
* Postgres doesn't, thank $DEITY
Fix list ordering in host/mapping_controller specs

* Used to work by coincidence in mySQL
* We're only interested in the set, not the order
Site#default_host depends on host insert order

* Make that explicit, we got away with it in mySQL
Get everything failing for a reason

* Raise RuntimeErrors with suggestions so we can see what
  class of problem breaks what in specs
* Gives us something to fix. Ignoring features right now,
  concentrating on specs
Postgres: fix organisation sites scope

* Digit boolean becomes boolean literal
* Can't alias the COUNT in the HAVING
* ONE, ah ha ha
* TWO, ah ha ha