Add ComplexArithmeticPass.cpp, implementing a potential approach for supporting
complex numbers in a target-independent manner, deferring to the TargetTransformInfo
for the given target to create a target-specific intrinsic.
This approach performs a naive check to find a complex case (<8 x float> which exceeds the width of a
standard vector register), before dropping down to a more granular check for simpler cases. This
granular method evaluates the instructions within a BasicBlock, identifying potential candidates and
tries to pair them up for each side of the complex multiply.