[mlir][IR] Define the singleton builtin types in ODS instead of C++
This exposes several issues with the current generation that this revision also fixes.
- TypeDef now allows specifying the base class to use when generating.
- TypeDef now inherits from DialectType, which allows for using it as a TypeConstraint
- Parser/Printers are now no longer generated in the header(removing duplicate symbols), and are now only generated when necessary.
- Now that generatedTypeParser/Printer are only generated in the definition file, existing users will need to manually expose this functionality when necessary.
- ::get() is no longer generated for singleton types, because it isn't necessary.
Differential Revision: https://reviews.llvm.org/D93270