[mlir] Refactor InterfaceGen to support generating interfaces for Attributes and Types.
This revision adds support to ODS for generating interfaces for attributes and types, in addition to operations. These interfaces can be specified using AttrInterface and TypeInterface in place of OpInterface. All of the features of OpInterface are supported except for the verify method, which does not have a matching representation in the Attribute/Type world. Generating these interface can be done using gen-(attr|type)-interface-(defs|decls|docs).
Differential Revision: https://reviews.llvm.org/D81884