SIMD shift and select operators
Implement bitcast from SIMD to i128.
Expand vector insert/extract with dynamic index

This patch adds a pass which expands vector insert/extract element with
a non-constant index into memory operations.
Add a few more TargetTransformInfo heuristics

SIMD.js doesn't yet have vector-vector shifts or insert/extract by
non-constant index, so score those as expensive.
Support for non-power-of-2 SIMD types

LLVM's optimizer generates types like <3 x float> in some cases, so we
should support them. Also, this is a chance to make use of
loadXYZ/storeXYZ and friends.