message: [language][Bytecode Verifier] Clean up unused code
  The is_reference and is_value functions do not appear to be used
  for anything now. The is_canonical function was only mentioned
  as part of a precondition in a comment, so this changes that to
  be a MIRAI precondition that actually uses the code.
  Closes:
  Approved by: shazqadeer
diff: @@ -129,16 +129,6 @@ impl AbstractState {
  self.locals.insert(idx, value);
  }
  - /// checks if local@idx is a reference
  - pub fn is_reference(&self, idx: LocalIndex) -> bool {
  - self.locals[&idx].is_reference()
  - }
  -
  - /// checks if local@idx is a value
  - pub fn is_value(&self, idx: LocalIndex) -> bool {
  - self.locals[&idx].is_value()
  - }
  -
  /// Return true if self may safely be destroyed
  pub fn is_safe_to_destroy(&self) -> bool {
  self.locals.values().all(|x| x.is_safe_to_destroy())
  @@ -574,8 +564,8 @@ impl AbstractState {
  impl AbstractDomain for AbstractState {
  /// attempts to join state to self and returns the result
  - /// both self.is_canonical() and state.is_canonical() must be true
  fn join(&mut self, state: &AbstractState) -> JoinResult {
  + checked_verify!(self.is_canonical() && state.is_canonical());
  // A join failure occurs in each of the following situations:
  // - an unrestricted value is borrowed along one path but unavailable along the other
  // - a value that is not unrestricted, i.e., either reference or resource, is available
  