[mlir] Support dialect-wide canonicalization pattern registration
- Add hasCanonicalizer option to Dialect.
- Initialize canonicalizer with dialect-wide canonicalization patterns.
- Add test case to TestDialect.
Dialect-wide canonicalization patterns are useful if a canonicalization pattern does not conceptually associate with any single operation, i.e., it should not be registered as part of an operation's getCanonicalizationPatterns function. E.g., this is the case for canonicalization patterns that match an op interface.
Differential Revision: https://reviews.llvm.org/D103226