Add scheduled state and scheduled_publication date to edition

This includes the addition of a new state and state transition rules in
the state machine, and rules about publishing/scheduling in the
publishing mixin.

A submitted publication can be scheduled if it has scheduled_publication
date. A scheduled publication can be published once its
scheduled_publication date has passed.
Move scheduled publishing behaviour to separate mixin
Add scheduled publishing date picker
Toggle the scheduled publication date box based on the checkbox.
These are class methods, not instance methods.
The logic in this method seems to have been inverted.

Also, there was a minor grammar issue in the message.
Ensure that scheduled_publication dates are in the future.

This revealed a bug in the scheduled publication form, which can be
replicated prior to this commit by submitting an invalid
publication; in the form showing the errors, the scheduled
publication check box will be checked. This is because the
condition was checking for the presence of *any* value in the
`scheduled_publication_active` parameter, rather than the "active"
value (`1`).
Add schedule/force schedule buttons
Add schedule action to workflow controller

also allow edition index to filter for editions in the 'scheduled'
state.
Prevent scheduling if already scheduled
Allow scheduled publications to be unscheduled
Refactor unmodifiable validation

The name is no longer applicable since it is unmodifiable in other
states than 'published'.

I've moved methods only applicable to the validation into the validator
class rather than letting them pollute the edition class itself.
Add 'Publish scheduled editions' permission

also refactor permissions to use constants for the strings
Add rake tasks for publishing scheduled editions

Had to tweak #reason_to_prevent_publication_by to explicitly address the
rules around publishing scheduled editions.

Only require scheduled_publication to be in the future in the 'draft'
and 'submitted' state. I allow it to be in the past in 'rejected' state
because you may reject an edition and we don't want to nag people about
the scheduled_publication date in that case, it's up to the author or
departmental editor to set the correct scheduled_publication when
submitting it and scheduling it.
This stub isnt needed
Don't modify force_published flag when publishing scheduled edition

Also don't display publication schedule information in admin once
something has been published.
Handle retrospective approval after force-scheduling
Let any edition type be scheduled
Use serializable transaction isolation for scheduled publishing

We'll run cron jobs on all backend machines which invoke the scheduled
publishing task. We'll do this for redundancy (no single point of
failure) rather than performance.

Given that several machines could be executing this command at the same
time, the SERIALIZABLE transaction isolation level gives more guarantee
of correctness of the operation.

I experimented with doing this without SERIALIZABLE isolation level, and
rails pessimistic locking provides a lot of protection against
concurrent modification. However, there's still a theoretical race
condition, and given the high liklihood of multiple processes running at
the same time, I felt that using SERIALIABLE transaction was worthwhile
here.

I changed to use database cleaner truncation strategy for the tests of
this publishing, because if you attempt to "SET TRANSACTION ISOLATION
LEVEL" within a transaction, you'll get an error.
Add cron job to publish scheduled documents using whenever