Add Pure C++ Vector class for C++ Backend (Issue #2107)
Add Pure C++ Vector class for C++ Backend (Issue #2107)

This is a major refactoring of the C++ backend; the idea is that we provide two templated wrapper classes for vectors: one that is pure C++, and one that layers on top of the Clang/C++ native-vector support. They support the same APIs and are selected via a typedef at compile time. Notes:

-- This is deliberately incomplete; in particular, the Shuffle and Select operators need further attention; however, since currently-enabled tests don't exercise these ops at all, the throwing of an internal error is acceptable for now.
-- We deliberately wrap the native-vector stuff to ensure that both C++ and native provide the same API surface.
-- The vector classes are intended to be just enough to support what we need, rather than be-all-end-all vector classes. (e.g. we never emit +=, so we don't bother implementing it.)

I think this is a good approach going forward for robust vector support, so I'm going to continue to flesh it out; I'm deliberately pushing out this incomplete approach to get feedback.

psuriana/Halide,psuriana/Halide,psuriana/Halide,kgnk/Halide,kgnk/Halide,psuriana/Halide,kgnk/Halide,psuriana/Halide,kgnk/Halide,kgnk/Halide,kgnk/Halide,kgnk/Halide,psuriana/Halide,kgnk/Halide,psuriana/Halide