Broadcast implementation as InsertElement+Shuffle and related improvements

Generate 
   %broadcast_init.0 = insertelement <4 x i32> undef, i32 %val, i32 0
   %broadcast.1 = shufflevector <4 x i32> %smear.0, <4 x i32> undef, <4 x i32> zeroinitializer

instead of stream of InsertElements.

Finally this doesn't seem to give performance, but in general this should be better optimizable representation.