Field::Merge#save needs to return merged models.  #2302.

If we're going to update the state of those models in PSC, we need to
know which models were affected.  The most straightforward way to get
that information IMO is from the save process.

This commit also modifies QuestionResponseSet to return a public ID
(even though it doesn't persist such an ID); making all mergeable
entities respond to #public_id means that I don't have to keep passing
said ID across a bunch of methods.
Merge#status needs to track PSC sync, too.  #2302.
Update schema.
Add a placeholder for PSC sync to the merge run.  #2302.
Clean up (?) Merge#run.  #2302.

(?): This is easier for me to read, but I'm not sure if it's simpler by
any objective metric.
Event#sa_activity_ids.  #2302.
Strip spaces from Event and its spec.
Stub out Instrument#sa_activity_ids.  #2302.
Implement Instrument#sa_activity_ids.  #2302.
Methods to retrieve current events, instruments, participants.  #2302.
Eliminate adapter-model equality.  #2302.

Treating a fieldwork model adapter equal to the model itself has been
useful in the past, but it's not useful anymore.

Why?

Superposition#current{events, instruments, participants} should return
actual model objects, because they'll be used in processes that retrieve
and update PSC scheduled activities.  Said processes expect their
objects to respond to #sa_activity_ids and other bits that really exist
on the model objects.

It's possible to delegate those messages via the adapters, but that just
makes the adapters a mess.

Hence the change in this commit.  We can still have our one-line
expectations; we just need a different matcher.
Run do_psc_sync on a superposition; fix #crashed_at settings.  #2302.
Rename merges#completed_at to #merged_at.  #2302.

A merge is no longer complete until it's synced with PSC.
Stub out PSC sync logic for merge.  #2302.
More SA mapping work.  #2302.
PscSync#prioritize.  #2302.
Some documentation cleanups.  #2302.
{Event,Instrument}#sa_activity_ids -> #scheduled_activities.  #2302.

I'd like to receive all scheduled activities for an Event or Instrument,
but still be able to filter them by their metastates.  The best way to
do that is to return the whole activity.
Initialization-by-keyword-argument for Psc::ScheduledActivity.  #2302.

This breaks the initialization contract of Struct subclasses, but I
think the inconsistency is worth it:

1. We already discourage the use of positional arguments for
   initializing Psc::ScheduledActivity objects.
2. There is a very significant ease-of-use improvement here.  In tests,
   we're usually only interested in setting a small subset of attributes.
   Prior to this commit, these were the only ways to do that with
   Psc::ScheduledActivity:

      sa = Psc::ScheduledActivity.new
      sa.activity_id = 'foo'
      ...

   or

      sa = Psc::ScheduledActivity.new.tap do
             sa.activity_id = 'foo'
             ...
           end

   or the discouraged

      sa = Psc::ScheduledActivity.new(nil, 'foo', ...)

   All of the above methods are a lot more tedious than

      sa = Psc::ScheduledActivity.new(:activity_id => 'foo')

3.  While this scheme will break if we ever decide we need to set a Hash
    for the first argument and only ever set that argument, I don't think
    that's very likely to occur for scheduled activities.  (That, and
    the whole idea of Psc::ScheduledActivity and other value objects is
    to provide a friendlier interface than hashes.  Should we find
    ourselves needing to set or get a map from a Psc::ScheduledActivity,
    we may need to look at introducing another value object.)

Does Psc::ScheduledActivity even need to be a Struct?
-----------------------------------------------------

A natural question.  I'm not sure what the answer to that is.  Struct
gives us a couple of nice things:

* attribute accessors
* structural equality

However, neither of these are all that difficult to reimplement.  We'll
just have to see how big of a deal this inconsistency is.
Only sync on open activities.  #2302.