Add int4 support to most remaining ops on CPU/GPU.
Add int4 support to most remaining ops on CPU/GPU.

Now almost all ops support int4, while before, only convert and a few others did. A few ops still do not work properly with int4, and I will add support for these ops soon. The unsupported ops are: Scatter, Clz, Popcnt, ShiftRightLogical, Convolution.

FloatNormalization is used to convert most int4 ops to an int8 version. The name "FloatNormalization" is now somewhat misleading as it applies to int4 as well as float-types, so I will change this in a future CL.

All int4 arrays must have the element_size_in_bits layout field set to 4. Many passes previously created new instructions but did not set element_size_in_bits, which causes problems whens expanding int4 support to all ops. For each pass, this was solved in one of two ways:

1. Some passes which have this problem call the SubByteNormalization after the pass runs, which properly sets element_size_in_bits on all instructions.
2. Other passes call UpdateLayout(Shape*), a base method of HloModulePass which previously did nothing. Now it sets element_size_in_bits properly on the shape since all backends except the interpreter pack int4 arrays. UpdateLayout is already called by several passes on newly-added instructions. This change adds more calls to UpdateLayout.
