message: Add reverse, to_lowercase, to_uppercase
diff: @@ -506,6 +506,32 @@ impl<'a> StringMethod<'a> {
  .and_then(|os_str| os_str.to_str()).unwrap_or(word.as_str()));
  }
  },
  + "reverse" => {
  + if let Some(value) = expand.vars.get_var(self.variable) {
  + let rev_graphs = UnicodeSegmentation::graphemes(value.as_str(), true).rev();
  + output.push_str(rev_graphs.collect::<String>().as_str());
  + } else if is_expression(self.variable) {
  + let word = expand_string(self.variable, &expand, false).join(self.pattern);
  + let rev_graphs = UnicodeSegmentation::graphemes(word.as_str(), true).rev();
  + output.push_str(rev_graphs.collect::<String>().as_str());
  + }
  + },
  + "to_lowercase" => {
  + if let Some(value) = expand.vars.get_var(self.variable) {
  + output.push_str(value.to_lowercase().as_str());
  + } else if is_expression(self.variable) {
  + let word = expand_string(self.variable, &expand, false).join(self.pattern);
  + output.push_str(word.to_lowercase().as_str());
  + }
  + },
  + "to_uppercase" => {
  + if let Some(value) = expand.vars.get_var(self.variable) {
  + output.push_str(value.to_uppercase().as_str());
  + } else if is_expression(self.variable) {
  + let word = expand_string(self.variable, &expand, false).join(self.pattern);
  + output.push_str(word.to_uppercase().as_str());
  + }
  + },
  _ => {
  eprintln!("ion: unknown string method: {}", self.method);
  }
  