Factor out the functionality that collects quantization candidate ops from `StableHloQuantizationPattern`.
Factor out the functionality that collects quantization candidate ops from `StableHloQuantizationPattern`.

The mechanism for collecting candidate ops for quantization is different when `RootOpT` is a `DequantizeOpT` or `QuantizeOpT`.
This change consolidates the representation by having an overload functions `CollectCanidateOps` for each of `DequantizeOpT` and `QuantizeOpT`.

It also imposes extra constraint to the `DequantizeOpT` and `QuantizeOpT` from the template definition level so that checks for the number of users / operands aren't necessary in the rewrite body.

Also includes minor readability changes like:

* Using const refs for `ops_blocklist` and `nodes_blocklist` to avoid extra copies.
* Renaming `quantizing_ops` to `candidate_ops` for clarity.
