Add Google's diff patch match js library

So that we can do inline diffs without the new lines
remove diffy and use google's js diff library

This enables editors to see changes inline more akin to MS words
'redline'. The unix diff library duplicates lines which can make it
harder to see the actual change. To achieve this we use the default
settings of dpm which are:

  Diff_EditCost = 4;
  Match_Threshold = 0.5;

And the diff_cleanupEfficiency algorithm.

The API docs are here:
https://code.google.com/p/google-diff-match-patch/
Increase edit cost to make diffs more readable
Make the insert and delete styles really like word track changes
Add some missing test coverage
Extract external logic from consultations

Ready for sharing and re-use for publications
DRY up consultations#show
Publications can be external

I've made a half-hearted attempt to make frontend look presentable.
Going to handover to someone who knows what they're doing to tidy up
the frontend/CSS.
Ensure that unpublishing an edition checks unpublishing.valid?

Also adds a check that you do not provide the same alternative url as
the unpublished edition.
Make unpublishing validate URI even if not using the redirect
Move the external publication language
Refactor PublicUploadsController to remove helper

This helper is going to be factored out of all the attachment
controllers eventually.
Refactor AttachmentsController to remove helper

The helper is going to be removed in a future commit.
Remove unused UploadsControllerHelper
Show a 404 for unknown files

This has the side effect of showing a 404 to unauthenticated users as
well, which is probably desirable (as to them the file is functionally
non-existent).

This also involved removing an old test that doesn't apply any more.
Use Whitehall::UrlMaker to generate the public_doc_url
Adjust steps for topics and topical events

No need to drive the UI to create fixture data in setup steps. Also
move the helper methods out of the steps files.
Failing acceptance test
Simplify classication form templates
Rework functional tests and add missing coverage