[RFC] Add a builtin ComplexAttr

Ok, I think I may have found a solution: we can add another builder to ConstantOp which allows to pass in the type in addition to the Attribute. This allows the FoldSplatConstants pass in FusionOnTensors.cpp to create a ConstantOp with a type which is the same as the element type of the DenseElementsAttr it tries to fold, without requiring to pass in the type via the Attribute. And then the print() and the parse() methods can be adjusted to print/parse a type if the attribute is ArrayAttr.

Here is the patch with this attempt: https://reviews.llvm.org/D101908