Make validation messages on New URL consistent

The form labels this field as 'Redirects to', but the validation messages were
referring to it as 'New URL'. 'Redirects to is not a URL' reads a little
awkwardly, so let's make it consistent with existing validation messages on
bulk add.
Merge pull request #331 from alphagov/make_validation_messages_on_new_url_more_consistent

Make validation messages on New URL consistent
Fix a spec to use an invalid URL

This looks as if it was left over from the switch to use Addressable
everywhere - Addressable can parse '___' but it wasn't in the whitelist,
so validation was failing but not for the reason indicated in the test
description. This one really is unparseable by Addressable.
Create BulkAddBatch and use it for bulk add

This lets us add a second subclass for the ImportBatch which will have
different inputs and behaviour.
BulkAddBatch should create BulkAddBatchEntries
Basic ImportBatch#create_entries
Add ImportBatchRow

This will represent a row in the import CSV/TSV. It will act like a presenter,
encapsulating knowledge of how to translate the row into a ImportBatchEntry.
Add a basic ImportBatchesController
Add basic specs for ImportBatchesController

Also move the shared examples for a user without permission into
AuthenticationControllerHelpers.
ImportBatchesController creates a batch
Rename @import to @batch for the #new action

This makes the instance variables consistent with the #create action.
Add an import preview page

This displays counts of each type of mapping to be created, and a
table which currently contains all of the batch's entries (rather
than the first 20).

The table duplicates small parts of the _mappings_table partial, but
since that partial includes many behaviours we don't need here it is
simpler to have this duplication instead of trying to make the partial
usable in this context as well.

This also adds a feature for the happy path (at the moment it only goes
as far as the preview page).
Handle the old URL being an absolute URL
Canonicalize the old URL

ImportBatchRow needs the site to do this.
Basic semantic sorting of ImportBatchRows

Where there are multiple rows for an old URL, especially after canonicalization,
this will enable us to choose the "best" row from a CSV of mappings by sorting
them.
Refactor tests for line length
Earlier redirects trump later ones

To do this, we had to add line_numbers so that an ImportBatchRow can tell if it
came before another.
Raise an error if comparing ImportBatchRows w/ different paths

You shouldn't be comparing rows for different paths. We had to change the specs
to comply with this as we had been breaking that rule.
ImportBatch only creates deduplicated entries
Memoise ImportBatchRow#path and #type

We're now potentially calling these methods a lot, and they are relatively
expensive but are static.