This patch introduces the concept of IR listeners in MLIR. IR listeners
are used to track changes in the IR. They are attached to an Operation
and receive notifications when the operation is modified.
Operation inherits listeners from the parent operation. This allows to
set a listener on a FuncOp (or a ModuleOp) for example and receive
notifications about any future Operation inserted somewhere in the
function.
RFC: https://discourse.llvm.org/t/rfc-introduce-the-concept-of-ir-listeners-in-mlir/67854