Refer to `_quantization_method` for per-channel quantization of conv layers.
Refer to `_quantization_method` for per-channel quantization of conv layers.

Currently per-channel quantization is controlled by a global field [`enable_per_channel_quantized_weight`](http://google3/third_party/tensorflow/compiler/mlir/quantization/stablehlo/quantization_config.proto;l=55;rcl=617473690).

This change allows using `Method` instead for determining per-channel quantization for convolution op pattern family.

It allows a consistent, local reasoning for determining per-channel quantization, whereas previously it relied on some global pre-defined configuration such as [`GetStableHloOpQuantSpec`](http://google3/third_party/tensorflow/compiler/mlir/quantization/stablehlo/ops/stablehlo_op_quant_spec.cc;l=66;rcl=615942585). Moreover, it allows granular control of per-channel quantization (per-quantizable-unit), whereas `enable_per_channel_quantized_weight` is essentially a global flag that cannot provide granular control.

After this change, per-channel quantization can be specified by setting the `Granularity` field of `QuantizedType` in `Method`.
For example, a `Method` for per-channel quantization at quantization dimension = 3 for the operand index of 1 is represented as:

```txtpb
static_range_ptq {
  input_quantized_types {
    key: 1
    value {
      granularity {dimension_specs {dimension: 3}}
    }
  }
}
```

Per-channel quantization is then achieved in two places:

* In `PrepareQuantizePass`, where it refers to `OpQuantSpec` (now populated using `Method`) to insert Q/DQ pairs with per-channel quantized types.
* In `QuantizePass`, where it looks up the `Method` to tell the `RewriteGemmStyleOp` to perform per-channel quantization.
