message: Move panorama check into new_unit.
  Instead of at the call site, check inside `ActiveValidator::new_unit`
  whether the unit is either a proposal itself, or it votes on an existing
  proposal.
diff: @@ -197,7 +197,6 @@ impl<C: Context> ActiveValidator<C> {
  return effects;
  } else if timestamp == r_id + self.witness_offset(r_len) {
  let panorama = self.panorama_at(state, timestamp);
  - if panorama.has_correct() {
  if let Some(witness_unit) =
  self.new_unit(panorama, timestamp, None, state, instance_id)
  {
  @@ -212,7 +211,6 @@ impl<C: Context> ActiveValidator<C> {
  }
  }
  }
  - }
  // We are not creating a new unit. Send a ping if necessary, to show that we're online.
  if !state.has_ping(self.vidx, timestamp) {
  warn!(%timestamp, "too many validators offline, sending ping");
  @@ -416,6 +414,9 @@ impl<C: Context> ActiveValidator<C> {
  state: &State<C>,
  instance_id: C::InstanceId,
  ) -> Option<SignedWireUnit<C>> {
  + if value.is_none() && !panorama.has_correct() {
  + return None; // Wait for the first proposal before creating a unit without a value.
  + }
  if !self.can_vote(state) {
  info!(?self.own_last_unit, "not voting - last own unit unknown");
  return None;
  