Remove reflection-based invoication on non-generic vectors

Rather than looking at ElementType via reflection and generating code at runtime,
this delegates the responsibility for making the generic invocation to the vector
itself. This is mainly refactoring (remove ugly reflection). This also removes
unused call site for 2 vectors and replaces call site for vector lists with a call
using a witness vector. In AppendN, this does the same thing as before - find first
vector and use it as a witness to get the static type (but doing this in a single
pass should be easier). The previous implementation was in line with what was there
originally (and so it was pretty nice!) - here I just tried to simplify the entire
"call site" stuff...