message: simplify SecretAgent::set_alpn()
  Now that protocols is a slice instead of an iterator it's
  possible to simplify the flow a little.
diff: @@ -406,34 +406,28 @@ impl SecretAgent {
  /// 255 octets in length.
  pub fn set_alpn(&mut self, protocols: &[impl AsRef<str>]) -> Res<()> {
  // Validate and set length.
  - // Unfortunately, this means that we need to run the iterator twice.
  - let alpn: Vec<String> = protocols
  - .into_iter()
  - .map(|v| v.as_ref().to_owned())
  - .collect();
  - let mut encoded_len = alpn.len();
  - for v in alpn.iter() {
  - assert!(v.len() < 256);
  - encoded_len += v.len();
  + let mut encoded_len = protocols.len();
  + for v in protocols {
  + assert!(v.as_ref().len() < 256);
  + encoded_len += v.as_ref().len();
  }
  // Prepare to encode.
  let mut encoded = Vec::with_capacity(encoded_len);
  - let mut add = |v: String| {
  + let mut add = |v: &str| {
  encoded.push(v.len() as u8);
  encoded.extend_from_slice(v.as_bytes());
  };
  // NSS inherited an idiosyncratic API as a result of having implemented NPN
  // before ALPN. For that reason, we need to put the "best" option last.
  - let mut alpn_i = alpn.into_iter();
  - let best = alpn_i
  - .next()
  - .expect("at least one ALPN value needs to be provided");
  - for v in alpn_i {
  - add(v);
  - }
  - add(best);
  + for v in protocols.iter().skip(1) {
  + add(v.as_ref())
  + }
  + add(protocols
  + .first()
  + .expect("at least one ALPN value needs to be provided")
  + .as_ref());
  assert_eq!(encoded_len, encoded.len());
  // Now give the result to NSS.
  