Merge branch 'release/0.17'
Use different variables in the crontab file to help the install script

Using '!!(*= $vhost_dir *)!!' instead of '/data/vhost/!!(*= $vhost *)!!'
makes it easier for the install script to rewrite the crontab for
systems that keep web host data in directories other that /data/vhost
(e.g. /var/www is common).

This is similar change to 20e447e7356ac0387.  Fixes #1376
Make search description specs match actual cases

In the largest Alaveteli instance, WDTK, only a fraction of tracks use
filters and these specs represent those that have actually been used
commonly.
Remove unused variable
Use entire descriptions for searches rather than assembling.

Assembling from phrases makes the descriptions impossible to translate -
just give complete descriptions for the most common cases.
Remove old unused code.
Remove obsolete line.

Should have been removed in
https://github.com/mysociety/alaveteli/commit/b236d4f113187b0e5d87867fc6512e5486f9764f.
Make track factory name a bit more specific.
Add notices for subscribing something you're subscribed to.

These notices are full sentences, rather than being composed of phrases,
which should make them easier to translate.
Add notices for subscribing to something.

These notices are complete sentences, not composed on the fly, so should
be easier to translate.
Add notices for unsubscribing from things.

These are full sentences, not composed on the fly, so should be easier
to translate.
Move track descriptions to a helper.

We can access url generation methods more easily here.
Remove CGI.escape calls.

Escaping will happen automatically in Rails 3.
Reformat for line length.
Make public body update titles translatable.

This way the translators can control the order of elements in the
sentence.
Remove explicit escaping calls

Will be done automatically in Rails 3
Add SpamAddress model

The volume of spam in the holding pen in WDTK has increased.

Over a few weeks in January 2014 the pattern was roughly:

- 8 were sent "To" the same address, which was a nearly valid old request
  address - correct hash, but missing the second hyphen.
- 1 was sent "To" an invalid request address (nearly correct hash)
- 1 was sent "BCC" a valid request address
- 1 was sent "BCC" request@whatdotheyknow.com

If a spam was sent "To" an old valid request address then it would be
rejected.

It's not entirely safe to just reject mails to old requests with any
hash, because sometimes authorities miss out a digit in the request
number, though perhaps simply getting a failure bounce would cause them
to check.

In any case that wouldn't trivially catch the most frequent case above
as it doesn't have an obvious request number.

---

We looked at greylisting and configuring the MTA with an RBL.

Greylisting was rejected as it would slow down the responsiveness of the
application when people email in. This could be revisited if/when emails
are parsed through a queue system depending on how we find the
performance there.

An RBL is already configured, but this ticket refers more to where the
email is sent rather than who it came from.

---

We elected to:

- Create spam_address model
- Add code to RequestMailer.receive to check the list of spam addresses
  and silently discard an incoming mail if it's addressed to one of them
- Add page to admin interface for adding/removing spam addresses

---

Thanks to Ganesh Sittampalam for the research and Louise Crow for the
implementation strategy.
Ignore mail sent to known spam addresses
Add missing csrf_meta_tags helper

http://api.rubyonrails.org/v3.2.13/classes/ActionView/Helpers/CsrfHelper.html#method-i-csrf_meta_tags

> I was getting a ActionController::InvalidAuthenticityToken destroy
  error when using the Destroy method in my Rails 3 app. Turns out, when
  I was migrating to Rails 3, I forgot to include this in the html
  header.
  – http://therailworld.com/posts/34-ActionController-InvalidAuthenticityToken-with-Destroy-action
Add AttachmentToHTML library

Extracts the attachment processing from FoiAttachment#body_to_html

AttachmentToHTML contains adapters which convert
  - text/plain
  - application/pdf
  - application/rtf

Results are returned as an AttachmentHTML::HTML instance which contains
the raw HTML and other metadata about the conversion.