Validate New URL against whitelist in database

Whitelist copied from Bouncer.

Conflicts:

	spec/models/mappings_batch_spec.rb
Remove redundant http_status code

We've rewritten history in the versions table to pretend that it was always
Mapping.type, not Mapping.http_status.
Extract hostname validator
Add validations to WhitelistedHost
Admin UI for viewing/adding to Whitelisted Hosts
Merge pull request #297 from alphagov/remove_redundant_code_in_versions_helper

Remove redundant http_status code
Merge pull request #273 from alphagov/validate_new_url_in_whitelist

Validate New URL against whitelist in database
Blanket find and replace URI.parse() to Addressable::URI.parse()

- The tests are meant to fail - I'm fixing them in a separate commit
  to avoid quite so many one-line changes.
- If there's a file in here that's not meant to be here, let me know
  and I'll attempt to take it out.
Fix the tests that were failing after d3de9c0e5d

- This makes sure that at least some XSS vulnerabilities are catered
  for, by checking that the path doesn't contain `<script>`.
  `URI.parse` did this for us, but we don't have the luxury using
  `Addressable::URI.parse`, as it is a valid URL according to the RFC
  it uses - see https://github.com/sporkmonger/addressable/issues/141.
- Underscores are also valid according to `Addressable::URI.parse`,
  so change the tests using underscores for invalid data to use curly
  braces for invalid data. Revert the changes in 30b999a that had to
  change underscores to dashes for `URI.parse` to confirm the
  hostnames as valid.
Change the URI validation to not just be "does it start with http://?"

- Remove excluding URIs containing <script> following @rgarner's
  security investigation. This isn't a security concern as we deal
  with this in other places. Remove a test associated with the URI
  parser stating this was an invalid URI.