Add contracts for synchronizable events

I thought I had pushed this a long time ago, but it turns out that I forgot about it.

This PR adds contracts for CML-style events. It also fixes event chaperones for multiple-valued events (which are rarer, but are possible to construct).

Relevant people: @mflatt @rfindler

Robby: in particular, is there anything extra I should do to accommodate the new contract changes?